下面是代碼:如何定義`getchar()`的返回類型?
#include <stdio.h>
int main()
{
char c;
while((c = getchar()) != EOF)
{
putchar(c);
}
return 0;
}
但一些機構說,我應該改變char c
到int c
。
誰能告訴我原因嗎?
下面是代碼:如何定義`getchar()`的返回類型?
#include <stdio.h>
int main()
{
char c;
while((c = getchar()) != EOF)
{
putchar(c);
}
return 0;
}
但一些機構說,我應該改變char c
到int c
。
誰能告訴我原因嗎?
因爲getchar()
被定義爲:
int getchar(void);
這應該是足夠的理由。原因很好解釋here:
如果將getchar的返回值分配給char,則可能出現兩種類型的錯誤/失敗。
如果類型炭被簽名,並且如果EOF定義(像通常那樣),爲-1時, 字符與十進制值255(「\ 377」或「\ XFF」在C)將是 符號擴展並且會比較等於EOF,提前終止輸入 。
如果類型char是無符號的,實際的EOF值將被截斷(由 具有其高位比特丟棄,可能導致255或 0xff的),並且將不會被識別爲EOF,從而導致有效地 無限輸入。
有些人可能想知道_why_'getchar'定義爲返回一個'int'。特別是因爲我很快找到了重複項,並且找不到一個簡單的「getchar」返回什麼?「題。 – dave
因爲'getchar'只是讀取一個字符並將其返回,爲什麼要使用'int',而不是使用'char'? – BlackMamba
,因爲'EOF'不是'char'而是'int'。所以'getchar'可以返回一個負數(「我無法獲得char!」)或者標準輸入中的下一個字符。 – dave
getchar
回到EOF
指示文件或錯誤的結束,否則返回unsigned char
投給int
。如果您使用char
來存儲返回值,則無法區分EOF
和某些字符之間的差異。
你應該RTFM [的getchar(3)](http://man7.org/linux/man-pages/man3/getchar.3.html),它告訴你'getchar'返回'int'。 –