变量被视为未初始化

时间:2014-09-05 16:56:49

标签: c variables initialization

在下面的C代码中(受K& R中的示例启发),变量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 =单词数量)

我不明白为什么会发生这种情况,因为我在开始时明确指定了一个值。

2 个答案:

答案 0 :(得分:4)

  

我不明白为什么会发生这种情况,因为我在开始时明确地给它赋值。

您不会将值分配给nwnc是唯一分配的值。

与数组初始化不同,您可以通过从初始化程序中省略零来为多个元素分配零,标量变量必须单独初始化:

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

请注意,您无需初始化c,因为它是在循环标头中无条件分配的。

答案 1 :(得分:2)

这一行:

int c,nl,nw,nc = 0;

不做你认为的事情。只有nc设置为0.

如果你想初始化其他人,你必须明确地这样做:

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