在windows系統下,我們通常認為回車和換行是一個概念,但實際上,換行是指移動到下一行的當前位置,而回車則是回到當前行的開頭。
我們之所以將回車和換行視為同一概念,是因為在使用n時,它同時執行了回車和換行的操作。
代碼語言:C 運行次數:0
#include<stdio.h> int main(){ printf("遲來的grownn"); return 0; }
代碼語言:C 運行次數:0
#include<stdio.h> int main(){ printf("遲來的grownr"); return 0; }
可以看到,n和r的效果不同,但使用r時,輸出結果似乎沒有顯示。這是由于緩沖區的影響。
我們可以簡單地理解為,輸入輸出操作并不是逐字符進行的(某些特殊情況除外),而是使用行緩沖區。
在行緩沖模式下,只有遇到換行符時才會執行真正的輸出。因此,使用r時,輸出內容會暫存在緩沖區,直到程序結束時才會清空緩沖區。
代碼語言:C 運行次數:0
#include<stdio.h> int main(){ printf("遲來的grownn"); sleep(3); return 0; }
代碼語言:C 運行次數:0
int main(){ printf("遲來的grown"); sleep(3); return 0; }
運行結果如下:
第一段代碼先輸出遲來的grown,然后休眠3秒; 第二段代碼休眠3秒后,在程序結束時才輸出遲來的grown。
這兩段代碼的區別在于是否使用了n,這也證明了行緩沖區的機制:遇到換行符時會刷新緩沖區內容(程序結束時也會刷新緩沖區內容)。
這是因為在Linux中,程序執行完畢后,光標位于行首,命令行信息會覆蓋輸出內容。
那么,我們能否通過一些操作來查看輸出內容呢?
當然可以,我們可以使用fflush來刷新緩沖區(stdout)的內容。
代碼語言:C 運行次數:0
int main(){ printf("遲來的grown"); fflush(stdout); sleep(3); return 0; }