2011-04-15 44 views
6

我想讓程序打印某些內容,然後等待幾秒鐘,然後在同一行中打印其他內容。我試圖把它寫成:在同一行中打印並在C中暫停

printf ("bla bla bla"); 
sleep (2); 
printf ("yada yada yada\n"); 

但在輸出中,我得等待2秒,然後我得到整行打印爲一個。當我試圖將輸出放在不同的行中時,它會暫停打印。

如何讓它在同一行中暫停打印?

*在Linux上

+4

fflush(stdout); – Erik 2011-04-15 17:20:39

回答

17
printf ("bla bla bla"); 
fflush(stdout); 
sleep (2); 
printf ("yada yada yada\n"); 

fflush強制標準輸出內部緩衝區的工作被刷新到屏幕上。

3

stdout默認情況下是一行緩衝流,這意味着您需要顯式刷新它。它隱含在換行符上。這種行爲是由C99標準規定的。

這意味着在您的第一個printf中,文本被添加到內部緩衝區中。這樣做是爲了提高效率,例如打印大量小文本片段時。

你的第二個printf包含一個換行符,這會導致流被刷新。如果需要,您可以通過fflush(stdout);明確刷新stdout

作爲一種替代方案,您也可以使用無緩衝stderr,如fprintf(stderr, "bla bla bla");,但正如其名稱暗示它用於錯誤和警告。

另請參閱SO問題Why does printf not flush after the call unless a newline is in the format string?