我乳寧使用Visual Studio 2010的目的是爲了看看我定義變量c
作爲char
或int
會發生什麼,因爲getchar()
函數返回一個整數(以下簡單程序在C編程語言中廣爲人知的陷阱,請參閱int c = getchar()?)。控制檯輸入的怪現象,以C程序
#include <stdio.h>
int main()
{
char c;
//int c;
while((c = getchar()) != EOF)
putchar(c);
printf("%d\n",c);
return 0;
}
當我從控制檯輸入一些字符到這個程序時,我發現了一個奇怪的現象,如下圖所示。如果作爲輸入的EOF
遵循字符序列(第1行),則無法正確識別(小右箭頭是輸出,第2行)。但是,如果是獨立輸入(第4行),則可以正確識別並終止程序。
我沒有在Linux上測試這個程序,但有人可以解釋爲什麼會發生這種情況嗎?
這種行爲與'c'聲明爲'int'時有什麼不同嗎? –
@larsmans不,不是。如果'c'是'int'類型,我得到了相同的結果。 – Bloodmoon
嘗試輸入ÿ(y變音符號,帶有DIAERESIS的LATIN小字母Y,U + 00FF);當你使用'char c;'時,我希望你的程序在讀取那個字符時也停止了,它不應該這樣做。如果你使用了'int c;',你會沒事的。記住:'getchar()'返回一個'int'! –