2011-10-24 37 views
21

我想關閉的標準輸出緩衝爲獲得準確結果爲下面的代碼如何關閉標準輸出的緩衝用C

while(1) { 
printf("."); 
sleep(1); 
} 

代碼的printf一堆「」只有當緩衝區被填滿時。

+3

爲什麼不'fflush(標準輸出)'的照顧? –

+1

[爲什麼printf不會在調用後刷新,除非換行符在格式字符串中? (in C)](http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin) – DarkDust

+1

候選*在StackOverflow *上詢問最多的問題。 – DarkDust

回答

5

使用fflush(stdout)。您可以在每個printf之後調用它來強制緩衝區刷新。

+13

這並不真正「關閉C中stdout的緩衝」。 – hagello

-2

你可以做

write(1, ".", 1); 

,而不是

printf("."); 
70

您可以使用setvbuf function:與標準輸出作爲參數

setvbuf(stdout, NULL, _IONBF, 0); 
+3

好的。謝謝。順便說一句'setbuf(stream,NULL);'相當於'setvbuf(stream,NULL,_IONBF,BUFSIZ);' – sehe

+10

一個告誡:將'setbuf'或'setvbuf'稱爲**是非常合法的**在對其執行任何輸入或輸出之前對其進行操作。因此明確使用'fflush'通常是一個好主意。 –

7

您還可以使用函數setbuf

setbuf(stdout, NULL); 

這將需要一切

+0

這不是一個很好的答案,引用Newlib:'ANSI C和System V接口定義(問題2)都需要 <>。但是,它們的含義不同在於緩衝區的含義 指針:SVID問題2規範說明緩衝區 指針請求無緩衝輸出。爲了獲得最大的便攜性,請避免使用緩衝指針。 – MightyPork

相關問題