C語言printf()真的會將輸出發送到屏幕嗎?
起初,printf()被聲明為將輸出發送到一個叫做buffer的中間緩存區。不時的將buffer中的內容發送到屏幕。標準C語言清楚的定義了什麼時候將buffer的內容發送到屏幕。將buffer發送到屏幕或文件的操作稱為flushing the buffer。
- buffer滿的時候會被髮送;
- 遇到一個新行符號\\n會被髮送;
- 有一個即將發送的輸入,比如scanf();
看一個例子:
第1、2行的printf()不會填滿buffer並且也沒有\\n符號,但第3行馬上有一個輸入操作scanf(),要求輸入。所以這個輸入操作會強迫printf()被髮送到屏幕。
當然,也有可能你遇到的是一個老版的scanf()實現,它是不會強迫flush。這樣的結果就是屏幕不會有任何提示顯示。在這種情況下,你可以使用一個\\n符號讓輸出發送到屏幕上。修改後如下:
這份代碼就可以工作了,無論是否有一個即將到來的輸入操作去flushing buffer。
還有一個解決方案就是用fflush()函數。
閱讀更多 程序員剛剛 的文章