如何在循环内增加一个 while 循环的计数器?

How to increment a counter for a while loop within the loop?

我觉得我在这里会觉得很愚蠢,但我只是在学习如何使用 ++-- 来递增和递减 while 循环的变量,并且想知道为什么这段代码有效,为什么无效?

错误代码:

int ctr = 0;
while (ctr < 10)
  printf("%d",ctr);
  ctr=ctr+1;

错误代码无限期地输出零。

工作代码:

int ctr=0;
while (ctr++ < 10)
    printf("%d",ctr);

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

第一种情况

while (ctr < 10)
  printf("%d",ctr);
  ctr=ctr+1;

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

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

while (ctr < 10) {
  printf("%d",ctr);
  ctr=ctr+1;
}

会做。


第二种情况

int ctr=0;
while (ctr++ < 10)
    printf("%d",ctr);
while 条件检查表达式中,

ctr 作为后缀递增运算符的副作用已经递增。因此,在打印值时,正在打印已经增加的值。

确实很简单。

int ctr = 0;
while (ctr < 10)
  printf("%d",ctr);
  ctr=ctr+1;

在第一段代码中,尽管有缩进,但您的 while 只涉及 printf("%d",ctr);,因为没有块使 ctr=ctr+1; 属于 [=14] =].

可以写成:

int ctr = 0;
while (ctr < 10)
  printf("%d",ctr);
ctr=ctr+1;     // This is not in the loop, even with the previous indentation.

在此循环中 ctr 没有增量,然后它将 运行 永远打印零。

在这第二段代码中

int ctr=0;
while (ctr++ < 10)
    printf("%d",ctr);

你每次都增加 ctr,它会工作得很好。

如果你想让第一个循环工作,这样写:

int ctr = 0;
while (ctr < 10) {
  printf("%d",ctr);
  ctr=ctr+1;
}

现在 ctr=ctr+1; 确实在 while 循环中。

int ctr = 0;
while (ctr++ <= 10)
{ 
    printf("%d",ctr-1);
}

输出为 012345678910