這是一個非常基本的C問題,來自Kernighan和Ritchie的第18頁。爲什麼不用getchar()讀取退格字符?
我編譯這個非常簡單的代碼從鍵盤字符計數輸入:
#include <stdio.h>
/* count characters in input; 1st version */
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%1d\n", nc);
}
編譯沒有問題,運行良好,並且行爲與預期相同,即如果我輸入「Hello World」的好看多了,它當我按下CTRLD時,返回值爲11以給出EOF字符。
什麼讓我感到困惑的是,如果我犯了一個錯誤,我可以使用退格刪除這些字符並重新輸入,並且它只返回當我調用EOF時終端顯示的字符數。
如果代碼正在計算每個字符(包括特殊字符),如果我鍵入四個字符,刪除兩個,輸入另外兩個,不應輸出8個字符(4 char + 2 del + 2 char) 4?
我明顯誤解了C如何處理退格,以及代碼如何增加變量nc
?
編輯由終端應用程序處理,所以'getchar'從不讀取刪除。 –
注意:根據標準,您應該使用'int main(void)'而不是'main()',因爲前者是有效的。 –
@CoolGuy:實際上,第二個版本仍然有效,但遺留下來。這是一個過時的功能,可能會從標準中刪除。說:是的,應該明確使用第一個版本。通常原型風格的簽名應該用於一般的功能。 – Olaf