一段for循环的代码,不理解为什么最后一次循环没进入

代码出处:学习浙大翁恺的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之后就没有再进入循环了(截图如下)

img

困惑:个人看来,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的循环