我寫了一個小程序,以測試從stdin
閱讀文本文件:閱讀文本文件停止在最後一行
int main(){
char c;
while(!feof(stdin)){
c = getchar(); //on last iteration, this returns '\n'
if(!isspace(c)) //so this is false
putchar(c);
//remove spaces
while (!feof(stdin) && isspace(c)){ //and this is true
c = getchar(); // <-- stops here after last \n
if(!isspace(c)){
ungetc(c, stdin);
putchar('\n');
}
}
}
return 0;
}
我再傳給它的小文本文件:
jimmy 8
phil 6
joey 7
與最後一行(joey 7
)以\n
字符結尾。
我的問題是,它讀取和打印最後一行後,循環回來檢查更多的輸入,沒有更多的字符要讀取,它只停在代碼塊中記錄的行。
問題:feof()
返回true的唯一方法是讀取失敗後,如下所示:Detecting EOF in C。爲什麼不是最終致電getchar
觸發EOF,我怎樣才能更好地處理這個事件?
[爲什麼「 while(!feof(file))「總是錯?](http://stackoverflow.com/q/5431941/1679849) –
我不確定。它沒有檢測到任何失敗的讀取? – corporateWhore
請點擊鏈接並閱讀。你應該從'getchar()'(它返回一個'int',而不是'char')的返回值,並且對EOF進行測試。作爲'while()'語句的條件測試'feof()'幾乎總是錯誤的。 –