https://www.52fb.cn里面的空格輸入?
C語言中回車,換行,空字符與空格:fgets和gets在讀取換行符的區(qū)別
摘要:C語言中,我們常常從終端輸入,并且輸出到終端,鍵盤上的回車,輸入到緩沖區(qū)以后,變成了什么字符?是‘\0’還是‘\n’?回車與換行有什么區(qū)別?本文主要為你講解C語言中的換行、回車等控制字符,幫助區(qū)別它們的實(shí)質(zhì)。
1.空格
它的ASCII碼為0x20,而不是0x00。其中,gets可以讀入空格字符。
2.回車(\r)
這里有一個(gè)很重要的區(qū)分點(diǎn):回車符號(hào)和回車鍵。
回車(‘\r’)效果是輸出回到本行行首,結(jié)果可能會(huì)將這一行之前的輸出覆蓋掉。例如執(zhí)行:
puts("helloworld!\rxxx");
在終端輸出的是:
xxxloworld!
如果將上面的字符串寫入文件中,例如執(zhí)行:
char*s="helloworld!\rxxx";
FILE*str=fopen("t.txt","r");
fwrite(s,16,1,str);
用文本編輯器打開t.txt。顯示的效果將由打開的編輯器所決定。
vi的效果為
windows記事本效果為
可以看到,vi將\t用^M代替,而記事本就沒有顯示該字符。
3.回車鍵
關(guān)于“回車鍵”的來歷,還得從機(jī)械英文打字機(jī)說起。在機(jī)械英文打字機(jī)上,有一個(gè)部件叫“字車”,每打一個(gè)單詞,“字車”就前進(jìn)一格。當(dāng)打滿一行字符后,打字者就得推動(dòng)“字車”到起始位置,這時(shí)打字機(jī)會(huì)有兩個(gè)動(dòng)作響應(yīng):一是“字車”被歸位,二是滾筒上卷一行,以便開始輸入下一行,這個(gè)推動(dòng)“字車”的動(dòng)作叫“回車”。后來,在電動(dòng)英文打字機(jī)上,人們?cè)黾恿艘粋€(gè)直接起“回車”作用的鍵。這個(gè)新增的鍵就被稱為“回車鍵”。
回車的ASCII代碼
16進(jìn)制是“0x0d”
10進(jìn)制是“13”
在某些語言中可以用"\r"表示。
不同的操作系統(tǒng)對(duì)回車的處理是不同的:
在Unix/Linux系統(tǒng)中,換行用"\n"一個(gè)字符表示,
而在Windows系統(tǒng)中,則用"\n\r"兩個(gè)字符表示。
4.換行(\n)10
如果要實(shí)現(xiàn)換行的效果,在終端我們只需要使用'\n'即可;如果要想在win系統(tǒng)下的文本中實(shí)現(xiàn)換行的效果,需要使用‘\n\r’兩個(gè)控制字符
5.C語言對(duì)于字符串的處理
首先,回車鍵按下以后,鍵盤緩沖區(qū)中存放的是字符\n,如果我們用getchar,那么我們讀入的是字符“\n”;如果我們使用gets進(jìn)行讀取,那么“\n”將被作為表示的結(jié)束的控制字符讀取。然后,gets會(huì)自動(dòng)把這個(gè)\n轉(zhuǎn)換成'\0'存儲(chǔ)在字符串中。
另外,如果從終端讀取一個(gè)字符串,gets會(huì)把最后的換行符\n換成\0,而fgets從stdin讀入的時(shí)候,不會(huì)對(duì)\n進(jìn)行處理。