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

Als*_*ina 1 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 }
Run Code Online (Sandbox Code Playgroud)

小智 6

尝试

 while ((c = getchar()) != EOF)
Run Code Online (Sandbox Code Playgroud)

否则,您比较的结果(c != getchar())EOF.


Kei*_*son 5

while ((c != getchar()) != EOF)
Run Code Online (Sandbox Code Playgroud)

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

您想要!=通过=(赋值)替换(不等式比较).