反视的getchar返回值给出错误oputput
问题描述:
#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?为什么走循环了两个地方来空间?反视的getchar返回值给出错误oputput
答
这里最大的问题是,你没有初始化count
。因此,无论if
是否成功,您最终都会读取一个调用undefined behavior的单位局部变量。
你应该总是初始化本地变量,如
int count = 0;
也就是说,getchar()
返回int
。将它存储到char
是错误的,因为如果函数返回EOF
(如您所期望的那样),它将不适合char
。
关于EOF
马科,引用C11
,章§7.21.1
EOF
,其扩展到一个整数常量表达式,与int
型和负值,即 由几个函数返回以指示文件结束,即,不再有来自 流的输入;
所以,你应该从char
改变ch
类型int
,像
int ch = 0;
分配取之于'的getchar()返回'到具有可变类型'char'是不好的,因为它会截断数据并且它在典型环境中区分不出一个charcter和'EOF'。使用'int'很好。 – MikeCAT
相关的,如果不是一个笨蛋:http://stackoverflow.com/q/35356322/694576 – alk
请阅读您要使用的所有库函数的手册。 –