\n \r與enter鍵詳解 C語言換行鍵退格鍵與enter鍵輸入

在ASCII表中:

回車 \r 本義是光標重新回到本行開頭,r的英文return,控制字符可以寫成CR,即Carriage Return

換行 \n 本義是光標往下一行(不一定到下一行行首),n的英文newline,控制字符可以寫成LF,即Line Feed

符號    ASCII碼      意義

\n        10        換行NL

\r        13        回車CR


網上有很多文章都有講解\n \r 與輸入enter鍵的差別,但沒有程序驗證,下面給出程序驗證:


在不同的操作系統這幾個字符表現不同,比如在WIN系統下,這兩個字符就是表現的本義,在UNIX類系統,換行\n就表現爲光標下一行並回到行首,在MAC上,\r就表現爲回到本行開頭並往下一行,至於ENTER鍵的定義是與操作系統有關的。通常用的Enter是兩個加起來。由於沒有mac電腦,所以只測試了linux與windows:


1.在windows系統下創建文件“windows”,輸入內容如下:


2.在linux系統下創建文件“linux”,輸入內容同上


3.編寫程序測試代碼如下:

#include<stdio.h>

int main(int argc, char *argv[])
{
char ch;
FILE *fp;
if(argc != 2)
{
printf("wrong input!\n");
return -1;
}

if((fp = fopen(argv[1],"r")) == NULL)
{
printf("Can't open file %s\n", argv[1]);
return -2;
}

while((ch = fgetc(fp)) != EOF)
{
printf("%d ", ch);
}

fclose(fp);

return 0;

}

4.在linux編譯運行後執行如下:


可以看到文件window每行以\r(13) \n(10)結尾,文件linux每行以\n(10)結尾, 說明不同系統下文件換行符的差別。

但是可以看到文件linux結尾處有個換行符\n(10),而文件windows沒有,這個原因還不清楚,希望各路大神留言解決。

5.在windows系統編譯運行如下:


windows下運行的結果都是以換行符\n(10)結尾,這是因爲windows文本編譯器會自動處理掉退格符\r(13)

另外,不論linux系統還是windows系統,從輸入緩衝區讀入enter鍵時,系統都會轉換爲\n,有興趣的同學可以寫代碼測試下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章