getchar()陷入循环,永远无法到达EOF

时间:2018-06-26 18:24:35

标签: c scanf eof

#include <stdio.h>

int main() {
    int c;
    while(getchar() != EOF) {
        if (getchar() == ' ') {
            c++;
        }
        printf("%i", c);
    }
}

我意识到输入像您正在阅读的句子一样的句子

我\ nrealized \ nthat \ ntyping \ nin \ n \ a \ n ...

我相信这就是它的读取方式,getchar()不能到达EOF以使括号中的条件为假。.

我的目标是制作一个程序,以吸收我的输入。 读 如果有空格 它依靠柜台 当达到EOF时 继续阅读的条件变为假 计数器值在屏幕上打印出来 告诉我整个输入中有多少空格。

不可能吗?这就是为什么人们只使用scanf()吗?

这是我尝试某些东西时得到的输出

user@user:/c# ./a.out
hello stackoverflow this does not do what i want it to
001111111222223344445666677

1 个答案:

答案 0 :(得分:4)

您需要将getchar()的结果放入变量:

int ch;
while ((ch = getchar()) != EOF) 

您不应第二次调用getchar()来检查它是否为空格,因为它将读取第二个字符,因此您将测试所有其他字符,只需比较变量即可:

    if (ch == ' ')

如果要查看空格总数,请将printf()放在循环的末尾,而不是循环中。

所以整个事情应该像这样:

#include <stdio.h>

int main() {
    int counter=0;
    int ch;
    while((ch = getchar()) != EOF) {
        if (ch == ' ') {
            counter++;
        }
    }
    printf("%i\n", counter);
}

要从终端发送EOF,请在Unix上键入 Control-d ,在Windows上键入 Control-z