2

可能重复:
为什么 getchar() 不能在 Windows 控制台中将返回识别为 EOF?

我正在尝试在下一个程序中打印出变量“nc”中的值:

int main()

{ 
 long nc;
 nc = 0;

 while (getchar() != EOF)
 ++nc;
 printf("%ld\n", nc); 
}

请告诉我为什么不打印?

4

5 回答 5

5

您的 while 循环中没有括号(这就是为什么不使用括号会导致软件出错)。因此,该值会增加,但不会打印。

尝试:

int main(int argc, char** argv)
{ 
    long nc;
    nc = 0;

    while (getchar() != EOF)
    { // ADD THIS
        ++nc;
        printf("%ld\n", nc); 
    } // AND THIS
}

否则,您的代码实际上是在做:

int main(int argc, char** argv)
{ 
    long nc;
    nc = 0;

    while (getchar() != EOF)
    {
        ++nc; // ENDLESSLY ADDING
    }
    printf("%ld\n", nc); // NEVER REACHED DUE TO WHILE LOOP.
}
于 2013-01-11T21:04:07.047 回答
3

您的 while 循环将继续循环,直到您在 Unix 上使用 Control-D 或在 Windows 上使用 Control-Z,Return 结束输入。它会在不打印任何内容的情况下执行此操作,因为您没有在 ++nc 和 printf 周围使用大括号。

#include <stdio.h>如果您没有在程序的顶部,您可能还会遇到 printf 问题。如果编译器不知道 printf 是一个可变参数函数,那么它在调用它时将无法正确格式化参数列表。

于 2013-01-11T21:01:26.150 回答
3

输入一些输入后

1 2 4 你必须输入,因为它是等效ctrl + D的 EOF 。ASCII

否则修改程序并放

while(getchar()!='\r') (直到你点击Enter

于 2013-01-11T21:07:12.663 回答
1

你是什​​么意思?有用:

./a.out 
asdfsdfasdfasdfasddddddddddddddddddddddd
41

echo "Try to count this" | ./a.out 
18
于 2013-01-11T21:01:36.930 回答
1

您必须通过停止 getchar 的 while 循环来停止从标准输入读取字符

然后你会看到打印的 nc 值

去做

EOF= CTRL+ D(对于 Linux)

EOF= CTRL+ Z(对于 Windows)

于 2013-01-11T21:01:40.437 回答