C語言中回車,換行,空字元與空格:fgets和gets在讀取換行符的區別

誰不小心的發表於2013-10-01

摘要:C語言中,我們常常從終端輸入,並且輸出到終端,鍵盤上的回車,輸入到緩衝區以後,變成了什麼字元?是‘\0’還是‘\n’?回車與換行有什麼區別?本文主要為你講解C語言中的換行、回車等控制字元,幫助區別它們的實質。


1.空格

它的ASCII碼為0x20,而不是0x00。其中,gets可以讀入空格字元。


2.回車(\r)

這裡有一個很重要的區分點:回車符號和Enter鍵。

回車(‘\r’)效果是輸出回到本行行首,結果可能會將這一行之前的輸出覆蓋掉。例如執行:

       puts("hello world!\rxxx");

       在終端輸出的是:

       xxxlo world!

       如果將上面的字串寫入檔案中,例如執行:

       char *s = "hello world!\rxxx";

       FILE *str = fopen("t.txt","r");

       fwrite(s, 16, 1, str);

       用文字編輯器開啟t.txt。顯示的效果將由開啟的編輯器所決定。

       vi的效果為


       windows記事本效果為


       可以看到,vi將\t用^M代替,而記事本就沒有顯示該字元。


3.Enter鍵


關於“Enter鍵”的來歷,還得從機械英文打字機說起。在機械英文打字機上,有一個部件叫“字車”,每打一個單詞,“字車”就前進一格。當打滿一行字元後,打字者就得推動“字車”到起始位置,這時打字機會有兩個動作響應:一是“字車”被歸位,二是滾筒上卷一行,以便開始輸入下一行,這個推動“字車”的動作叫“回車”。後來,在電動英文打字機上,人們增加了一個直接起“回車”作用的鍵。這個新增的鍵就被稱為“Enter鍵”。

回車的ASCII程式碼
16進位制是“0x0d”
10進位制是“13”
在某些語言中可以用"\r"表示。
不同的作業系統對回車的處理是不同的:
Unix/Linux系統中,換行用"\n"一個字元表示,
而在Windows系統中,則用"\n\r"兩個字元表示。

4.換行(\n)10

如果要實現換行的效果,在終端我們只需要使用'\n'即可;如果要想在win系統下的文字中實現換行的效果,需要使用‘\n\r’兩個控制字元


5.C語言對於字串的處理

首先,Enter鍵按下以後,鍵盤緩衝區中存放的是字元\n,如果我們用getchar,那麼我們讀入的是字元“\n”;如果我們使用gets進行讀取,那麼“\n”將被作為表示的結束的控制字元讀取。然後,gets會自動把這個\n轉換成'\0'儲存在字串中。

另外,如果從終端讀取一個字串,gets會把最後的換行符\n換成\0,而fgets從stdin讀入的時候,不會對\n進行處理。

相關文章