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

C++ Switch语句内嵌Do-While Loop的case穿透问题咨询

问题解答

1. do-while循环多次迭代出现case穿透的原因

你看到的每次循环都触发case穿透,本质是switch的分支匹配逻辑从头到尾只执行了一次。
你的do-while循环完整嵌套在switch的case 0分支内部,程序第一次进入switch时,用初始n=12计算得到n%4=0,匹配到case 0的入口后开始向下执行代码:
当执行到do {后进入循环逻辑,后续循环的每次迭代只会直接跳转到do {后的第一行代码开始执行,根本不会再回到switch的开头重新计算条件、匹配case。又因为你所有的case分支都没有写break中断执行流,所以每次循环执行完do后的代码后,都会自动按代码书写顺序向下穿透,执行case 3、case 2、case 1的对应逻辑,就出现了每次循环都有穿透的现象。

2. Switch case的匹配逻辑说明

switch语句的条件表达式(此处为n%4)仅在第一次进入switch语句时计算一次,计算结果仅用来确定初始的入口case位置,既不会保存这个值,也不会在后续执行过程中自动重新计算、重新匹配case。
哪怕后续n的取值发生了变化,只要执行流没有退出switch语句再重新进入,就不会触发新的case匹配。你代码里的do-while循环全程都在switch内部运行,永远不会重新触发switch的条件判断流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:54:05