C 为什么我的兴趣在这里上下浮动?
当打印用户输入的读取值时,数字会下溢,我不明白为什么 所以我通过ANSIC标准只是把C作为一种语言,我不明白为什么前两个值会溢出或溢出C 为什么我的兴趣在这里上下浮动?,c,initialization,integer,C,Initialization,Integer,当打印用户输入的读取值时,数字会下溢,我不明白为什么 所以我通过ANSIC标准只是把C作为一种语言,我不明白为什么前两个值会溢出或溢出 int c; int nl, bl, tab= 0; while ((c = getchar())!= EOF){ if (c == '\n'){ ++nl; } if (c == ' '){ ++bl; } if (c == '\t'){ ++tab; } p
int c;
int nl, bl, tab= 0;
while ((c = getchar())!= EOF){
if (c == '\n'){
++nl;
}
if (c == ' '){
++bl;
}
if (c == '\t'){
++tab;
}
printf("%d\t %d\t %d\n", nl, bl, tab);
}
我在发布lol后马上解决了这个问题,但只是把声明改成了这个
int nl=0, bl=0, tab= 0;
这里
intnl,bl,tab=0代码>
将选项卡设置为0
,但不以任何方式初始化nl
和bl
。因此,当它们以后增加时,这是未定义的行为。请尝试以下方法:
int nl = 0, bl = 0, tab = 0;
当您这样使用它时:
intn1,b1,tab=0代码>
您不初始化n1
和b1
。因此产生了意想不到的结果。
变量n1
和b1
只是保存堆栈上的一些垃圾值,在您的示例中,您正在使用这些值。
可能逗号运算符没有达到预期效果:
见:
如果要一起初始化它们,可以这样做:
intn1,b1,tab代码>
然后:
n1=b1=tab=0代码>是什么让你得出结论,你的数字是“下溢”的???到底什么是“下溢”?