c - 为什么 switch 无法捕获 EOF(使用 getchar())?

标签 c switch-statement eof

#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 case body 从循环中移出,它应该可以工作,但是如何使其在 switch 中工作?

最佳答案

正如 BLUEPIXY 在评论部分中提到的,由于 ((c = getchar()) != EOF) for 循环条件将在 EOF 处失败,因此控制不会进入 for 循环内部。

关于c - 为什么 switch 无法捕获 EOF(使用 getchar())?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40520529/

相关文章:

c - 什么时候使用poll C函数的POLLOUT事件?

c - 将 CSV 元素导入 C 中的二维数组

c - EOF 在这方面到底是如何工作的呢?

c - 处理 SIGCHLD 会将 EOF 返回给父亲,为什么?

c - 如何正确使用 EOF?

c - 套接字编程 : UDP Client-Server in C

java - 如何避免循环切换反模式

java - 为什么我的 switch 语句不起作用并陷入无限循环?

java - Java 中 switch-case 的语法

php EOF 忽略新行