2012-08-27 73 views
2

可能重複:
Why does printf not flush after the call unless a newline is in the format string? (in C)「printf」 上不打印字符串立刻

我有這樣的代碼:

printf("Starting nets allocation..."); 
while(...) 
{ 
    ...some operations... 
} 
puts("DONE"); 

代碼應該打印立即顯示字符串「Starting nets allocation ...」,然後在循環之後打印出「DONE」。

相反,該程序首先進行循環,然後打印字符串「啓動網分配...... DONE」 爲什麼會發生?我該如何解決這個問題?

+0

[如何詢問和接受問題](http://stackoverflow.com/faq#howtoask)。 – bitmask

回答

8

輸出流stdout默認情況下緩衝,所以如果你想直接輸出,您需要刷新輸出流 - 使用fflush - 或導致換行符在printf要打印:

printf("Starting nets allocation..."); 
fflush(stdout);  

或者:

printf("Starting nets allocation...\n"); 

注意,您可以在文件指針級別使用setbuf函數stdio.h中還控制緩衝:

setbuf(stdout, NULL); 

的第二個參數是setbuf由調用者提供的緩衝液被用於緩衝輸出到流中。傳遞NULL表示要禁用緩衝,並且相當於:

setvbuf(stdout, NULL, _IONBF, 0); 

它也禁用指定流上的緩衝。

setbufhere文檔。

+0

fflush()是我正在尋找的! 謝謝! –

3

輸出到stdout被緩衝,所以加

fflush(stdout); 

printf的呼叫後刷新內容。通常添加換行符也會刷新緩衝區,但在您的情況下,這可能不是您想要的。