代码出处:学习浙大翁恺的C语言程序设计的循环控制部分遇到的一道小测,代码如下:
#include <stdio.h>
int main(){
int sum = 0;
for ( int i=0; i<10; i++ ) {
if ( i%2 ) continue;
sum += i;
}
printf("%d\n", sum);
return 0;
}
问题描述:运行结果是20,我计算的结果是30,debug发现原因在于i=9之后就没有再进入循环了(截图如下)
困惑:个人看来,i=9是满足i<10的循环条件的,所以不太理解自己错在哪儿?
肯定是执行了循环体的,只是循环体中判断条件不满足。
循环体内可以输出i的值看看。
#include <stdio.h>
int main(){
int sum = 0;
for ( int i=0; i<10; i++ ) {
printf("当前i=%d"\n",i);
if ( i%2 ) continue;
sum += i;
}
printf("%d\n", sum);
return 0;
}
你在哪一步看到i=9?
9%2=1,if条件满足,会continue,也不会执行sum+=i的
i=9时是进入循环体了,
只是你 循环体第一行是 if ( i%2 ) continue;
if中是9%2等于1条件成立执行 continue跳过了这一次循环, 没有执行sum += i;而已.
下次循环i=10就结束循环了
不是因为这个,是因为你的for的起始点,如果你把i=0改为i=1,i<10改成i<=10,答案就是30
#include <stdio.h>
int main(){
int sum = 0;
for ( int i=1; i<=10; i++ ) {
if ( i%2 ) continue;
sum += i;
}
printf("%d\n", sum);
return 0;
}
```c++
```
i=9 时进入循环了,但是执行了判断后认为Continue,就跳过了sum+= 1,直接执行了i++,然后因为i=10 ,不满足条件就退出for循环了。
i=9 时调试没进入for循环可能和编译器有关。
你多了i=0的循环而少了i=10的循环