#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
答案 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 。