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

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,但不以任何方式初始化 nlbl。因此,当它们稍后增加时,它是未定义的行为。试试这个:

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

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

您没有初始化 n1b1。因此出现了意想不到的结果。
变量 n1b1 只是保存一些垃圾值,它们在堆栈上,在您的示例中,您正在使用这些值。

也许逗号运算符没有达到您的预期:
见:https://en.wikipedia.org/wiki/Comma_operator

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