C語言printf()真的會將輸出發送到屏幕嗎?

C語言printf()真的會將輸出發送到屏幕嗎?

起初,printf()被聲明為將輸出發送到一個叫做buffer的中間緩存區。不時的將buffer中的內容發送到屏幕。標準C語言清楚的定義了什麼時候將buffer的內容發送到屏幕。將buffer發送到屏幕或文件的操作稱為flushing the buffer。

  1. buffer滿的時候會被髮送;
  2. 遇到一個新行符號\\n會被髮送;
  3. 有一個即將發送的輸入,比如scanf();

看一個例子:

C語言printf()真的會將輸出發送到屏幕嗎?

依靠輸入迫使輸出到屏幕

第1、2行的printf()不會填滿buffer並且也沒有\\n符號,但第3行馬上有一個輸入操作scanf(),要求輸入。所以這個輸入操作會強迫printf()被髮送到屏幕。

當然,也有可能你遇到的是一個老版的scanf()實現,它是不會強迫flush。這樣的結果就是屏幕不會有任何提示顯示。在這種情況下,你可以使用一個\\n符號讓輸出發送到屏幕上。修改後如下:

C語言printf()真的會將輸出發送到屏幕嗎?

用\\n符將打印輸出的屏幕

這份代碼就可以工作了,無論是否有一個即將到來的輸入操作去flushing buffer。

還有一個解決方案就是用fflush()函數。


分享到:


相關文章: