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

时间:2017-02-02 06:03:17

标签: c while-loop post-increment postfix-operator

我有一种感觉,我觉得这里真的很蠢,但我只是学习使用++--来增加和减少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。

3 个答案:

答案 0 :(得分:3)

在第一种情况下

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);
ctr条件检查表达式中,

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

答案 1 :(得分:0)

确实非常简单。

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

在第一段代码中,尽管存在缩进,但您的while仅涉及printf("%d",ctr);,因为没有阻止ctr=ctr+1;属于while

可以这样写:

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循环中。

答案 2 :(得分:-3)

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

输出为012345678910