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