为何该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
相关产品推荐
相关产品推荐

