如何在循环内为while循环增加计数器?

Kin*_*ter 2 c while-loop post-increment postfix-operator

我有一种感觉,我会在这里感到非常愚蠢,但我只是在学习使用++--增加和减少 while 循环的变量,并且想知道为什么这段代码有效,为什么这不起作用?

错误代码:

int ctr = 0;
while (ctr < 10)
  printf("%d",ctr);
  ctr=ctr+1;
Run Code Online (Sandbox Code Playgroud)

坏代码无限期地输出零。

工作代码:

int ctr=0;
while (ctr++ < 10)
    printf("%d",ctr);
Run Code Online (Sandbox Code Playgroud)

想法是输出为 012345678910,但即使在工作代码中,它也从 1 开始并变为 10,而不是从 0 开始。即使 ctr 的初始值是 0。

Sou*_*osh 5

在第一种情况下

while (ctr < 10)
  printf("%d",ctr);
  ctr=ctr+1;
Run Code Online (Sandbox Code Playgroud)

while循环体被认为是唯一printf()声明。ctr=ctr+1;不是循环体的一部分。所以你在循环条件检查中有一个不变的变量,这使它成为无限循环。

您需要将这两个语句括在一个块作用域中, using{}以便这两个语句都成为循环体的一部分。就像是

while (ctr < 10) {
  printf("%d",ctr);
  ctr=ctr+1;
}
Run Code Online (Sandbox Code Playgroud)

会做。


在第二种情况下

int ctr=0;
while (ctr++ < 10)
    printf("%d",ctr);
Run Code Online (Sandbox Code Playgroud)

ctrwhile条件检查表达式中,作为后缀递增运算符的副作用已经递增。因此,在打印值时,正在打印已经增加的值。