为什么我的整数在这里溢出和下溢?

3
当打印从用户读取的输入值时,数字会下溢和上溢,我不明白为什么会这样。因此,我正在查阅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);
  }

你是怎么得出你的数字“下溢和上溢”的结论的??? 什么是“下溢”呢? - AnT stands with Russia
3个回答

8

这里

int nl,bl,tab = 0;

tab设置为0,但不以任何方式初始化nlbl。因此,在稍后增加它们时是未定义的行为。请尝试使用以下内容:

int nl = 0, bl = 0, tab = 0; 

1
当你这样使用它时:
int n1, b1, tab = 0;

你没有初始化n1b1。因此会出现意外的结果。
变量n1b1只是保存了一些垃圾值,这些值在堆栈上,并且在你的示例中使用了这些值。

也许逗号运算符不是你所期望的:
参见:https://en.wikipedia.org/wiki/Comma_operator

如果你想一起初始化它们,可以这样做:
int n1, b1, tab;
然后:
n1 = b1 = tab = 0;

0

我发帖后就解决了,哈哈,只是将声明更改为这个

int nl=0, bl=0, tab= 0; 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接