
上一课标准答案输出2result true会输出1条件应写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 还有一种专门处理这种情况的结构switch1. 最基本的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最终输出Error3.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 ↓ 退出 switch5. 如果不写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 → Error7. 如果没有匹配的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理解成其他情况。所以它有点像else8.switch和if有什么区别这是今天真正需要理解的地方。假设int state 2;你想判断state 是 0 state 是 1 state 是 2 state 是 3这种情况很适合switch因为你是在比较同一个变量的固定值。但如果你要判断temperature 80或者angle -90 angle 90这种条件就更适合if9. 最简单的判断方法你现在可以先这样记switch适合一个变量 几个明确的固定值例如state 0 state 1 state 2if适合大小比较 范围判断 多个条件组合例如temperature 80angle -90 angle 90connected !error10. 机器人状态机的雏形这个概念以后特别重要。机械臂可能有这些状态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还是switchA. 判断机械臂温度是否大于 80℃ B. 根据 robot_state 的 0、1、2、3 执行不同动作