我想讓程序打印某些內容,然後等待幾秒鐘,然後在同一行中打印其他內容。我試圖把它寫成:在同一行中打印並在C中暫停
printf ("bla bla bla");
sleep (2);
printf ("yada yada yada\n");
但在輸出中,我得等待2秒,然後我得到整行打印爲一個。當我試圖將輸出放在不同的行中時,它會暫停打印。
如何讓它在同一行中暫停打印?
*在Linux上
我想讓程序打印某些內容,然後等待幾秒鐘,然後在同一行中打印其他內容。我試圖把它寫成:在同一行中打印並在C中暫停
printf ("bla bla bla");
sleep (2);
printf ("yada yada yada\n");
但在輸出中,我得等待2秒,然後我得到整行打印爲一個。當我試圖將輸出放在不同的行中時,它會暫停打印。
如何讓它在同一行中暫停打印?
*在Linux上
printf ("bla bla bla");
fflush(stdout);
sleep (2);
printf ("yada yada yada\n");
fflush強制標準輸出內部緩衝區的工作被刷新到屏幕上。
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?。
fflush(stdout); – Erik 2011-04-15 17:20:39