☰
C++ 第 6 课:switch —— 多状态选择
2026/10/1 16:11:18 网站建设 项目流程

上一课标准答案:

  1. 输出2
  2. result = true
  3. 会输出1
  4. 条件应写:
if (angle >= -90.0 && angle <= 90.0) { std::cout << "Move" << std::endl; }

上一课最重要的是:

&& 并且,所有条件都要成立 || 或者,至少一个条件成立 ! 取反

第 6 课:switch—— 多状态选择

前面我们学了:

if else if else

它非常灵活。

但如果程序只是根据一个变量的不同“固定值”选择不同操作,switch往往更清楚。

例如机械臂状态:

0 = 停止 1 = 运行 2 = 故障 3 = 回零

我们当然可以写:

if (state == 0) { // 停止 } else if (state == 1) { // 运行 } else if (state == 2) { // 故障 } else if (state == 3) { // 回零 }

但是 C++ 还有一种专门处理这种情况的结构:

switch

1. 最基本的switch

先看代码:

int state = 2; switch (state) { case 0: std::cout << "Stop" << std::endl; break; case 1: std::cout << "Running" << std::endl; break; case 2: std::cout << "Error" << std::endl; break; }

现在不要急着背。

我们一点点拆。


2.switch (state)是什么意思?

switch (state)

可以理解成:

看一看state现在是什么值,然后去找对应情况。

假设:

state = 2;

那么程序会去找:

case 2:

所以:

state = 2 ↓ switch(state) ↓ 寻找 case 2 ↓ 执行 case 2

最终输出:

Error

3.case是什么?

case 0:

可以理解成:

如果state的值是0,执行这里。

所以:

case 1:

表示:

如果是1。

case 2:

表示:

如果是2。

注意case后面不是分号:

case 2;

这是错的。

而是:

case 2:

后面用的是:

:

冒号。


4. 为什么需要break?

这是switch最容易出错的地方。

看:

case 2: std::cout << "Error" << std::endl; break;

这里:

break;

可以理解成:

到这里就离开这个switch。

也就是:

找到对应 case ↓ 执行内容 ↓ break ↓ 退出 switch

5. 如果不写break会怎样?

看这个例子:

int state = 1; switch (state) { case 0: std::cout << "A" << std::endl; case 1: std::cout << "B" << std::endl; case 2: std::cout << "C" << std::endl; }

因为:

state = 1;

程序先找到:

case 1:

输出:

B

但是没有break。

于是它会继续往下执行:

case 2:

于是又输出:

C

最终是:

B C

这叫:

fall-through,继续向下贯穿执行。

你现在不需要记英文。

只要记:

初学阶段,每个case后通常都要写break;。


6. 标准写法

switch (state) { case 0: std::cout << "Stop" << std::endl; break; case 1: std::cout << "Running" << std::endl; break; case 2: std::cout << "Error" << std::endl; break; }

这样:

state = 0 → Stop state = 1 → Running state = 2 → Error

7. 如果没有匹配的case怎么办?

比如:

int state = 9;

但是我们只有:

case 0: case 1: case 2:

这时候可以使用:

default:

例如:

switch (state) { case 0: std::cout << "Stop" << std::endl; break; case 1: std::cout << "Running" << std::endl; break; case 2: std::cout << "Error" << std::endl; break; default: std::cout << "Unknown state" << std::endl; break; }

如果:

state = 9;

就会进入:

default:

输出:

Unknown state

你可以把default理解成:

其他情况。

所以它有点像:

else

8.switch和if有什么区别?

这是今天真正需要理解的地方。

假设:

int state = 2;

你想判断:

state 是 0? state 是 1? state 是 2? state 是 3?

这种情况很适合:

switch

因为你是在比较:

同一个变量的固定值。


但如果你要判断:

temperature > 80

或者:

angle >= -90 && angle <= 90

这种条件就更适合:

if

9. 最简单的判断方法

你现在可以先这样记:

switch

适合:

一个变量 + 几个明确的固定值

例如:

state == 0 state == 1 state == 2

if

适合:

大小比较 范围判断 多个条件组合

例如:

temperature > 80
angle >= -90 && angle <= 90
connected && !error

10. 机器人状态机的雏形

这个概念以后特别重要。

机械臂可能有这些状态:

int robot_state = 0;

规定:

0 = Idle 空闲 1 = Moving 运动 2 = Error 故障 3 = Homing 回零

于是:

switch (robot_state) { case 0: std::cout << "Idle" << std::endl; break; case 1: std::cout << "Moving" << std::endl; break; case 2: std::cout << "Error" << std::endl; break; case 3: std::cout << "Homing" << std::endl; break; default: std::cout << "Unknown" << std::endl; break; }

这种程序结构以后在:

机器人控制 嵌入式程序 ESP32 ROS2 机械臂控制器

里面都很常见。


11. 逐行看一遍

#include <iostream> int main() { int robot_state = 3; switch (robot_state) { case 0: std::cout << "Idle" << std::endl; break; case 1: std::cout << "Moving" << std::endl; break; case 2: std::cout << "Error" << std::endl; break; case 3: std::cout << "Homing" << std::endl; break; default: std::cout << "Unknown" << std::endl; break; } return 0; }

执行:

robot_state = 3

进入:

switch (robot_state)

寻找:

case 3:

找到以后执行:

std::cout << "Homing" << std::endl;

输出:

Homing

然后:

break;

退出switch。


12. 一个特别重要的理解

switch不是循环。

很多初学者看到:

switch

可能误以为它会一直执行。

不会。

它只是:

根据当前值,选择一条分支执行一次。

例如:

int state = 1; switch (state) { ... }

执行完相应case后,程序继续向下运行。


本课小练习

第 1 题

int state = 1; switch (state) { case 0: std::cout << 10 << std::endl; break; case 1: std::cout << 20 << std::endl; break; case 2: std::cout << 30 << std::endl; break; }

输出什么?

第 2 题

int state = 5; switch (state) { case 0: std::cout << 1 << std::endl; break; case 1: std::cout << 2 << std::endl; break; default: std::cout << 3 << std::endl; break; }

输出什么?

第 3 题

break;在这里主要是干什么的?

第 4 题

下面两个需求分别更适合if还是switch?

A. 判断机械臂温度是否大于 80℃ B. 根据 robot_state 的 0、1、2、3 执行不同动作

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询