为什么我的整数在这里溢出和下溢?
Why are my ints over and underflowing here?
打印读取用户输入的值时,数字下溢和上溢,我不明白为什么。
所以我正在通过 ansi C 标准来选择 c 作为一种语言,我不明白为什么这会下溢和溢出前两个值。
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;
这里是
int nl, bl, tab= 0;
将 tab
设置为 0
,但不以任何方式初始化 nl
和 bl
。因此,当它们稍后增加时,它是未定义的行为。试试这个:
int nl = 0, bl = 0, tab = 0;
当你这样使用它时:
int n1, b1, tab = 0;
您没有初始化 n1
和 b1
。因此出现了意想不到的结果。
变量 n1
和 b1
只是保存一些垃圾值,它们在堆栈上,在您的示例中,您正在使用这些值。
也许逗号运算符没有达到您的预期:
见:https://en.wikipedia.org/wiki/Comma_operator
如果你想一起初始化它们,你可以这样做:
int n1, b1, tab;
然后:
n1 = b1 = tab = 0;
打印读取用户输入的值时,数字下溢和上溢,我不明白为什么。
所以我正在通过 ansi C 标准来选择 c 作为一种语言,我不明白为什么这会下溢和溢出前两个值。
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;
这里是
int nl, bl, tab= 0;
将 tab
设置为 0
,但不以任何方式初始化 nl
和 bl
。因此,当它们稍后增加时,它是未定义的行为。试试这个:
int nl = 0, bl = 0, tab = 0;
当你这样使用它时:
int n1, b1, tab = 0;
您没有初始化 n1
和 b1
。因此出现了意想不到的结果。
变量 n1
和 b1
只是保存一些垃圾值,它们在堆栈上,在您的示例中,您正在使用这些值。
也许逗号运算符没有达到您的预期:
见:https://en.wikipedia.org/wiki/Comma_operator
如果你想一起初始化它们,你可以这样做:
int n1, b1, tab;
然后:n1 = b1 = tab = 0;