2016-06-12 10 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