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

为何这段代码输出0223?for循环中case 2为何被执行两次?

代码输出0223及case 2执行两次的原因解析

嘿,我来帮你拆解这段代码的执行逻辑,搞懂这两个问题其实很简单,咱们逐次看循环里的每一次迭代:

先把代码贴出来方便对照:

for (int x = 0; x <4; x++) {
    switch (x) {
        case 2: printf("%d", x);
        case 0: printf("%d", x);
        default: break;
        case 3: printf("%d", x);
    }
}

逐次迭代分析:

  • x=0时:
    switch匹配到case 0,执行printf("%d", 0)输出0。因为case 0后面没有break语句,程序会继续往下走,直到遇到default: break;才跳出switch,这次迭代结束。
  • x=1时:
    switch里没有对应case 1的分支,直接走到default: break;,跳出switch,没有任何输出。
  • x=2时:
    switch匹配到case 2,先执行printf("%d", 2)输出第一个2。这里要划重点:C语言的switch分支里,如果某个case后面没有写break,就会触发**贯穿(fall through)**特性——程序不会跳出switch,而是继续执行后续所有case的代码,直到遇到break或者switch块结束。
    所以接下来程序会走到case 0,执行printf("%d", 2)输出第二个2,然后遇到default: break;才跳出switch。这就是你觉得case 2被执行两次的原因,其实是case 2的代码执行一次后,贯穿到case 0的代码又执行了一次,并非case 2本身被执行两次。
  • x=3时:
    switch匹配到case 3,执行printf("%d", 3)输出3。因为case 3后面没有其他语句,switch自然结束,这次迭代完成。

把所有输出按顺序连起来,就是0+22+3,也就是最终的0223。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:58:38