for循环可以改为while循环,但有些情况下会导致错误,比如当循环内有continue语句时
一个简单的例子:有一个循环语句,循环输出1到9间除2外的所有数字(即如果i等于2,则执行continue语句跳出此次循环,不执行此次循环的输出语句)
for循环
#include <stdio.h>
int main() {
for (int i = 1; i < 10; i++) {
if (i == 2) {
continue;
}
printf("%d", i);
}
return 0;
}
while循环
#include <stdio.h>
int main() {
int i = 1;
while (i < 10) {
if (i == 2) {
continue;
}
printf("%d", i);
i++;
}
return 0;
}
结果分析:
while循环的结果不是预期的13456789,而是一个1,并且一直未执行完毕。
分析代码可知两种循环的实际运行过程分别为:
for循环:计数器赋初值为1→条件判断→执行循环体→计数器自加→条件判断……
while循环:计数器赋初值为1→条件判断→执行循环体:循环体内包含计数器自加语句→条件判断……
执行continue语句直接跳出第2次循环后,for循环执行计数器自加语句,计数器变为3;
但while循环则跳过循环体内的计数器自加语句,直接执行条件判断语句,故计数器值一直为2并循环判断、循环跳出永无休止,所以窗口才只输出了一个数字1。