在下面的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
=单词数量)
我不明白为什么会发生这种情况,因为我在开始时明确指定了一个值。
答案 0 :(得分:4)
我不明白为什么会发生这种情况,因为我在开始时明确地给它赋值。
您不会将值分配给nw
:nc
是唯一分配的值。
与数组初始化不同,您可以通过从初始化程序中省略零来为多个元素分配零,标量变量必须单独初始化:
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;