取决于getchar返回值的计数器给出了错误的oputput

时间:2016-06-12 13:38:56

标签: c eof getchar

#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,哪里有空格?

1 个答案:

答案 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;