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

C++中switch与do-while嵌套代码输出为何是5而非6?

为什么这段嵌套switch与do-while的C++代码输出是5而不是6?

先看完整代码:

#include <iostream>

int main() {
    int n = 3, i=0;

    switch (n % 2) 
    {
    case 0: 
        do {
            ++i;
    case 1:
            ++i;
        } while (--n > 0);
    }
    std::cout << i;
}

核心原因:switch的跳转逻辑+无break的代码贯穿特性

初始值:n=3,i=0。我们一步步追踪执行流程:

  1. switch入口判断
    计算n%2,3模2结果为1,所以switch直接跳转到case 1的代码位置,不会执行case 0里的++i。

  2. 第一次循环执行

    • 执行case 1的++i,i变为1。
    • 走到do-while的循环条件:--n > 0,前置递减后n=2,2>0为真,循环继续,回到do的起始位置。
  3. 第二次循环执行

    • 回到do开头,先执行case 0里的++i,i变为2。
    • 因为没有break语句,代码会贯穿到case 1,执行++i,i变为3。
    • 判断循环条件:--n >0,n变为1,1>0为真,循环继续。
  4. 第三次循环执行

    • 回到do开头,执行case 0的++i,i变为4。
    • 贯穿到case 1执行++i,i变为5。
    • 判断循环条件:--n >0,n变为0,0>0为假,循环终止。

最后输出i的值就是5。

为什么会误以为是6?

很多人会默认每次循环都执行两次++i,三次循环就是6,但实际上第一次进入循环时,是通过switch直接跳转到case1,没有执行case0里的++i,只有后面两次循环才完整执行了do块里的两个++i,总执行次数是1+2+2=5。

内容的提问来源于stack exchange,提问作者Florin Drutu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:47:08