用getchar()在普通程序中检测不到CTRL + D(EOF)?

时间:2012-04-07 01:58:42

标签: c

我有以下一段c代码。当我按 CTRL + D 时,程序不会将其识别为EOF。

很少注意到:

  

我在VMware播放器上运行Ubuntu 11.10   使用gcc并从命令行运行程序   'stty -a'显示eof = ^ D

感谢您的帮助..

1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5    int c, nl;
  6    nl = 0;
  7    while ((c != getchar()) != EOF)
  8    {
  9       if (c == '\n')
 10          ++nl;
 11    }
 12    printf("line: %d\n", nl);
 13 
 14    return 0;
 15 }

3 个答案:

答案 0 :(得分:6)

尝试

 while ((c = getchar()) != EOF)

否则,您要将(c != getchar())的结果与EOF进行比较。

答案 1 :(得分:5)

while ((c != getchar()) != EOF)

这会将不等式int变量c(您尚未初始化)的值与getchar()返回的值进行比较。这种比较产生0或1,它不能等于EOF,这是负的。

您想要!=(分配)替换=(不等式比较)。

答案 2 :(得分:3)

while ((c != getchar()) != EOF)

应该是

while ((c = getchar()) != EOF)