如何在循环内增加一个 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
。
我觉得我在这里会觉得很愚蠢,但我只是在学习如何使用 ++
和 --
来递增和递减 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
。