目錄
一、輸出緩沖區?
1.1 輸出緩沖區的使用?
1.2 緩沖區的刷新?
1.3 輸出緩沖區的作用
二、回車換行
一、輸出緩沖區?
C/C++語言,當調用輸出函數(如printf()、puts()、fwrite()等)時,會給我們提供默認的緩沖區。這些數據先存放在輸出緩沖區中,然后再按照一定規則輸出到目標設備(如終端、文件、網絡等)。
1.1 輸出緩沖區的使用?
上面的結果是:等待兩秒后,字符串打印到屏幕上。
如果想讓它立即顯示有兩種常用方法:
- 在字符串尾部加上換行符 '\n'
printf("Hello CSDN!\n");?- 在printf語句后調用 fflush() 函數
1.2 緩沖區的刷新?
以上的兩種方法都是為了刷新緩沖區,將緩沖區中的內容立即輸出到目標設備上。
在C語言中,有以下幾種方式可以刷新輸出緩沖區:
- 自動刷新:緩沖區被填滿、程序正常結束或者遇到換行符。
- 手動刷新: 調用fflush函數。
例如fflush(stdout); 會將緩沖區內容輸出到目標設備上。- 緩沖模式設置:可以使用setbuf()函數或setvbuf()函數設置緩沖區的大小和刷新方式。
- 程序退出時刷新:當程序正常終止時,輸出緩沖區通常會被自動刷新。但是,如果程序異常終止(如調用exit()函數)或者使用非正常的終止方式(如abort()函數),輸出緩沖區可能不會被刷新。
1.3 輸出緩沖區的作用
-
減少系統調用:輸出操作通常比較耗時(因為每一次打印符號到顯示器上的時候都需要訪問外設,效率較低),因此將多個輸出操作合并到一個緩沖區中,可以減少系統調用的次數,從而提高程序的運行效率。
-
改善輸出效果:通過控制緩沖區的大小和刷新時間,可以更好地控制輸出的效果。
例如,可以設置緩沖區大小為一行文字的長度,并在每行文字結束時立即刷新緩沖區,從而實現逐行輸出的效果。 -
提高可移植性:不同操作系統和編程語言對輸出緩沖區的實現方式不同,但它們都提供了類似的接口。因此,使用輸出緩沖區可以提高程序的可移植性,使得程序更容易在不同的平臺上運行。
-
避免阻塞:當輸出設備(如終端、文件、網絡等)比較慢時,輸出緩沖區可以避免程序被阻塞。程序可以先將數據存儲到緩沖區中,然后繼續執行其他操作,直到輸出設備就緒后再將數據輸出。
二、回車換行
回車換行包含兩件事情:
- 換行:換到下一行
- 回車:讓對應的光標回到本行最開始
\r? ?表示只回車,光標回到本行最開始。
\n? 表示換行,在Linux中表示換行和回車。
老式回車鍵設計成以下形狀也是這個原因,告訴我們是換行、回車?
利用以上知識點就可以做一個簡單的倒計時程序:
#include <stdio.h>
#include <unistd.h>
int main()
{ for(int i = 10; i >=0; i--) { printf("%-2d\r",i); fflush(stdout); sleep(1); } printf("\n"); return 0;
}
關于回車和換行的用法也有很多,大家可以自行嘗試一下。