You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++代码输出差异及continue语句执行机制疑问

C++中continue语句的工作原理及代码分析

问题代码

// Online C++ compiler to run C++ program online
#include <iostream>
using namespace std;

int main() {
    
    for (int i = 0; i<=15;i+=2){
        cout<<i<<" ";
        if (0){
            continue;
          
        }
        i++;
    }
        
}

问题说明

运行上述代码后得到输出0 3 6 9 12 15,但预期输出是0 3 5 7 9 11 13 15,需要明确:

  1. continue语句是仅跳过if块,还是会跳过当前for循环的剩余代码?
  2. 代码中后续的i++为何没有带来预期的输出变化?

解答

先明确continue的核心逻辑:在for/while/do-while这类循环结构中,一旦执行continue,会直接跳过当前循环迭代里continue之后的所有语句,直接进入下一次循环的准备环节——对for循环来说,就是执行循环头的第三个表达式(也就是代码里的i+=2)。

针对你的代码具体分析:

  1. 代码里的if(0)是永远为假的条件,所以continue从来不会被触发,每次循环都会执行到i++这一步。

  2. 循环执行流程拆解:

    • 第一次迭代:i=0,输出0,执行i++后i=1;接着执行for循环头的i+=2,i变成3。
    • 第二次迭代:i=3,输出3,执行i++后i=4;接着i+=2变成6,输出6。
    • 后续以此类推,最终得到0 3 6 9 12 15的输出,完全符合代码逻辑。
  3. 你提到的“给定输出”0 3 5 7...,是当continue被触发时才会出现的结果——比如把if(0)改为一个能触发的条件,让某次循环跳过i++,才会让i的增量逻辑改变,进而得到间隔为2的输出。

回到你的核心疑问:

  • continue不是只跳过if块,而是跳过当前迭代中它之后的所有代码,直接进入循环下一轮准备。
  • 你的代码里i++是正常执行的,正是因为每次都执行i++,才让i在循环增量后跳步更大,导致输出间隔为3。

内容的提问来源于stack exchange,提问作者Anshika Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:10:26