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 循环内部。