0
的存在從一個功能的一部分將下面的代碼,我已經給出:澄清關於使用龜etc
char ch;
ch = fgetc(fp);
if (ch == EOF)
return -1;
凡fp
是作爲參數傳遞給函數的指針到文件/流。
然而,在檢查的fgetc()
,getc()
和getchar()
的使用,似乎他們都返回類型爲int而不是char類型,因爲EOF不適合那些在字符使用的值0-255,所以是通常爲< 0(例如-1)。然而,這導致我問三個問題:
- 如果
getchar()
返回int,爲什麼char c; c = getchar();
功能的有效使用?在這種情況下,C是否自動將類型轉換爲字符型,並且getchar()
被替換爲getc(fp)
或fgetc(fp)
? - 當
fgetc()
或其他兩個函數返回EOF時,程序中會發生什麼?它會再次嘗試並像以前一樣投下焦點,但然後失敗?如果有的話,什麼被存儲在ch
? - 如果EOF實際上不是一個字符,那麼
ch == EOF
是一個有效的比較,因爲EOF不能用char變量表示?
好,所以如果我要改變'焦炭CH;''到INT CH;',那麼該代碼段會正常運行提供有效的'fp'?另外,如果我想使用由'fgetc()'返回的int作爲字符串或其他函數中的字符,只要它不是EOF就可以將其轉換爲字符是否有效? – ScottyN91
@ ScottyN91是的,就是這麼多。 –
根據char是否被簽名以及如何實現EOF,使用char可能會導致從不能正確讀取EOF的各種問題到被解釋爲EOF的合法字符值之一。 –