2015-10-14 51 views
-3

下面是代碼:如何定義`getchar()`的返回類型?

#include <stdio.h> 
int main() 
{ 
    char c; 
    while((c = getchar()) != EOF) 
    { 
     putchar(c); 
    } 
    return 0; 
} 

但一些機構說,我應該改變char cint c

誰能告訴我原因嗎?

+1

你應該RTFM [的getchar(3)](http://man7.org/linux/man-pages/man3/getchar.3.html),它告訴你'getchar'返回'int'。 –

回答

5

因爲getchar()被定義爲:

int getchar(void); 

這應該是足夠的理由。原因很好解釋here

如果將getchar的返回值分配給char,則可能出現兩種類型的錯誤/失敗。

如果類型炭被簽名,並且如果EOF定義(像通常那樣),爲-1時, 字符與十進制值255(「\ 377」或「\ XFF」在C)將是 符號擴展並且會比較等於EOF,提前終止輸入 。

如果類型char是無符號的,實際的EOF值將被截斷(由 具有其高位比特丟棄,可能導致255或 0xff的),並且將不會被識別爲EOF,從而導致有效地 無限輸入。

+0

有些人可能想知道_why_'getchar'定義爲返回一個'int'。特別是因爲我很快找到了重複項,並且找不到一個簡單的「getchar」返回什麼?「題。 – dave

+0

因爲'getchar'只是讀取一個字符並將其返回,爲什麼要使用'int',而不是使用'char'? – BlackMamba

+0

,因爲'EOF'不是'char'而是'int'。所以'getchar'可以返回一個負數(「我無法獲得char!」)或者標準輸入中的下一個字符。 – dave

1

getchar回到EOF指示文件或錯誤的結束,否則返回unsigned char投給int。如果您使用char來存儲返回值,則無法區分EOF和某些字符之間的差異。

相關問題