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

为何该switch语句中第二个表达式也会求值为true?

问题解答

你疑惑的点其实就是switch贯穿特性的核心逻辑——switch找到匹配的case后,会从该位置开始顺序执行所有后续代码,不会再判断后续case的条件。

当你的channel值为1时,程序匹配到case 1,执行完打印"Channel 1"的语句后,因为没有break语句终止当前分支,程序会直接“滑”到下一个case 2的代码块里执行打印操作,完全不会再去检查channel是不是等于2。这就是为什么两个输出都会出现。

要解决这个问题,只需要在每个case的代码末尾加上break,让程序执行完当前分支后跳出switch:

void setup() {
  delay(100);
  Serial.begin(57600);
  delay(100);

  int channel = 1;

  switch (channel) {
    case 1:
      Serial.println("Channel 1");
      break; // 执行完当前分支后跳出switch
    case 2:
      Serial.println("Channel 2");
      break;
  }
}

void loop() {

}

顺带提一句:这种“贯穿”特性并非设计缺陷,有时候可以用来让多个case共享同一段代码(比如case1和case2要执行相同操作时,可以只在case2里写代码,case1不加break),但绝大多数场景下,都需要用break来避免这种意外的代码执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:22:50