簡體   English   中英

C-printf()無法正常工作,但是puts()可以正常工作

[英]C - printf() not working but puts() is working fine

void read_class_information(head* beginning, int scale_type) {
    puts("hello");
    // printf("hello");
}

我有一個簡單的函數,由main和printf()和fprintf()調用,以使stdout不能在其中工作。 另一方面,puts()可以正常工作。 我在printf()調用時沒有打開任何文件,或者有任何錯誤。 對問題可能有什么建議? 謝謝。

因為printf()不會自動刷新輸出流。 另一方面, puts()在傳遞的字符串的末尾添加新行'\\n' 之所以起作用,是因為'\\n'刷新了stdout

嘗試

printf("hello\n");

或者,顯式刷新stdout

fflush(stdout);

就在printf()語句之后。

嘗試在語句末尾使用換行符( '\\n' ),並確保您具有適當的標題。

默認情況下,流緩沖設置為行緩沖 ,這意味着在找到新的行字符\\n之前,不會真正發送任何內容給流。 三種緩沖方法是:

  • _IONBF :無緩沖
  • _IOLBF :行緩沖
  • _IOFBF :完全緩沖

您可以更改任何流的緩沖方法。 在這種情況下,您可能要更改stdout的緩沖方法:

setvbuf(stdout, (char *)NULL, _IONBF, 0);

這樣,您就不必fflush(stdout); 每次您要打印不帶換行符的內容時。 這會影響到您或不影響您的某些性能問題,因此您可以決定哪個更適合您。

和往常一樣,您可以訪問執行man setvbuf的文檔(當然,如果安裝了文檔)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM