2014-09-05 102 views
1

在下面的C代碼(即由一個例子以K &ř啓發),可變nw被視爲未初始化:變量被視爲未初始化

#include <stdio.h> 
#define IN 1 
#define OUT 0 
main(){ 

    int c,nl,nw,nc = 0; 
    int state = OUT; 
    while((c=getchar())!=EOF){ 
     ++nc; 
     if(c=='\n') 
      ++nl; 
     if(c==' ' || c=='\n' || c=='\t') 
      state = OUT; 
     else if(state == OUT){ 
      state = IN; 
      ++nw; 
     } 
    } 

    printf("%d %d %d\n" , nl, nw, nc); 
} 

例如:

input: one two three 
output: 1 796411731 14 

中間的數字應該是3(nw =單詞數量)

我不明白爲什麼會發生這種情況,因爲我明確地暗示了在開始時給它一個值。

回答

4

我不明白爲什麼會這樣,因爲我明確在開始時爲它分配一個值。

您不指定nw的值:nc是唯一分配的值。

與數組初始化,在那裏你可以通過初始化省略它們分配零到多個元素,標量變量都必須單獨初始化:

int c, nl = 0, nw = 0, nc = 0; 

請注意,您不需要初始化c,因爲它在循環頭中被無條件賦值。

2

這條線:

int c,nl,nw,nc = 0; 

沒有做什麼,你認爲它。只有nc設置爲0

如果你想初始化加上其他的,你必須這樣做明確:

int c = 0, nl = 0, nw = 0, nc = 0;