#include <stdio.h>
int main(void)
{
char ch;
int count;
while((ch=getchar())!=EOF){
if(ch==' '){
count++;
}
}
printf("total words is %d",count);
return 0;
}
我的C代码在这里,我很困惑,我把ctrl + Z直接放在windows中,结果计数是2?为什么它循环为2,哪里有空格?
答案 0 :(得分:4)
这里最大的问题是,你已经count
未初始化了。因此,无论if
是否成功,您最终都会读取一个调用undefined behavior的单元化局部变量。
您应该始终初始化局部变量,例如
int count = 0;
也就是说,getchar()
会返回int
。将其存储到char
中是错误的,因为如果函数返回EOF
(如您所愿),它将不适合char
。
关于EOF
marco,引用C11
,章节§7.21.1
EOF
它扩展为整数常量表达式,类型为int
,负值为 由几个函数返回以指示文件结尾,即不再有来自a的输入 流;
因此,您应该将ch
的类型从char
更改为int
,例如
int ch = 0;