2012-04-07 58 views
1

我有以下一段c代码。当我按CTRL + D该程序不会将其识别为EOF。使用getchar()在普通程序中未检测到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 } 

回答

6

尝试

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

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

3

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

应该

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

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

这个int变量c的值(你没有初始化)为不平等比较受getchar()返回的值。该比较产生0或1,不能等于EOF,这是负值。

您想用=(赋值)替换!=(不等式比较)。