c - 为什么 switch 无法捕获 EOF(使用 getchar())?
c - why switch couldnt catch EOF (using getchar())?
#include "stdio.h"
int main() {
int wordsAmount = 0;
for(int c = 0, inWord = 0; ((c = getchar()) != EOF) ;) {
switch(c) {
case '\t' : inWord = 0; break;
case '\n' : inWord = 0; break;
case ' ' : inWord = 0; break;
case EOF : printf("\nwords amount: %d\n", wordsAmount); return 0;
default : if(inWord == 0) { wordsAmount++; inWord = 1; }
}
}
return 1;
}
这个必须算字数,但是不行。
是的,如果将 EOF 案例主体从循环中移出,它应该可以工作,但是如何让它在 switch
中工作?
正如 BLUEPIXY 在评论部分提到的,由于 ((c = getchar()) != EOF) for 循环条件将在 EOF 处失败,因此控制不会进入您的 for 循环内部。
#include "stdio.h"
int main() {
int wordsAmount = 0;
for(int c = 0, inWord = 0; ((c = getchar()) != EOF) ;) {
switch(c) {
case '\t' : inWord = 0; break;
case '\n' : inWord = 0; break;
case ' ' : inWord = 0; break;
case EOF : printf("\nwords amount: %d\n", wordsAmount); return 0;
default : if(inWord == 0) { wordsAmount++; inWord = 1; }
}
}
return 1;
}
这个必须算字数,但是不行。
是的,如果将 EOF 案例主体从循环中移出,它应该可以工作,但是如何让它在 switch
中工作?
正如 BLUEPIXY 在评论部分提到的,由于 ((c = getchar()) != EOF) for 循环条件将在 EOF 处失败,因此控制不会进入您的 for 循环内部。