首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >getchar()卡在一个始终达不到EOF的循环中怎么办?

getchar()卡在一个始终达不到EOF的循环中怎么办?
EN

Stack Overflow用户
提问于 2018-07-18 06:45:11
回答 1查看 0关注 0票数 0
代码语言:javascript
复制
#include <stdio.h>

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

我意识到输入一个像你正确阅读的句子

我实现了\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n ...

我相信它是如何读取的,getchar()没有达到EOF以使条件在括号中为假。

我的目标是创建一个程序,从我那里获取输入...如果在达到EOF时计数器上有任何空格,则读取它。继续读取它的条件变为假,计数器值在屏幕上打印出来告诉我在我的整个输入中有多少空格..

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

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

代码语言:javascript
复制
user@user:/c# ./a.out
hello stackoverflow this does not do what i want it to
001111111222223344445666677
EN

回答 1

Stack Overflow用户

发布于 2018-07-18 16:29:24

你需要将结果getchar()放入变量中:

代码语言:javascript
复制
int ch;
while ((ch = getchar()) != EOF) 

你不应该getchar()第二次调用它来检查它是否是一个空格,因为那将读取第二个字符,所以你将测试每个其他字符,只需比较变量:

代码语言:javascript
复制
    if (ch == ' ')

如果你想看到空格的总数,把它printf()放在循环的末尾,而不是在它里面。

所以整个事情应该是这样的:

代码语言:javascript
复制
#include <stdio.h>

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档