2016-06-12 11 views
-1
#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

+0

分配取之于'的getchar()返回'到具有可变类型'char'是不好的,因为它会截断数据并且它在典型环境中区分不出一个charcter和'EOF'。使用'int'很好。 – MikeCAT

+0

相关的,如果不是一个笨蛋:http://stackoverflow.com/q/35356322/694576 – alk

+0

请阅读您要使用的所有库函数的手册。 –

回答

4

这里最大的问题是,你没有初始化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; 
+0

非常感谢你! – a86356

+2

而不是说谢谢你,如果它解决了你的问题,你可以接受一个答案。 – mssirvi