新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/10/1 16:11:23来源:尧图网络
C++ 第 6 课:switch —— 多状态选择
上一课标准答案输出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 执行不同动作
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

什么样的智能体数据才算优质?——基于ACE视角的大语言模型智能体数据生成研究 2026/10/1 17:03:32

什么样的智能体数据才算优质?——基于ACE视角的大语言模型智能体数据生成研究

什么样的智能体数据才算优质?——基于ACE视角的大语言模型智能体数据生成研究 论文来源:arXiv:2608.27260v1 摘要 大语言模型智能体越来越依赖生成式交互数据,以此学习与外部环境进行交互。和传统指令合成不同,智能体数据生成需要保证环境、任务、交互过程、成功信号四者之…

阅读更多 →
电子科技大学编译原理实验代码:词法分析到代码生成完整实现 2026/10/1 17:03:25

电子科技大学编译原理实验代码:词法分析到代码生成完整实现

简介:这份资源是电子科技大学编译原理课程的实验代码合集,面向正在学习编译原理、需要动手实现词法分析与语法分析的高校学生及自学者。内容围绕编译器前端核心模块展开,包含词法分析器与语法分析器的完整实现,涉及token识别、正则…

阅读更多 →
STBC空时分组码编码译码实现与MATLAB仿真:Alamouti方案与BER曲线分析 2026/10/1 17:03:24

STBC空时分组码编码译码实现与MATLAB仿真:Alamouti方案与BER曲线分析

简介:面向无线通信初学者,这份MATLAB代码实现了空时分组码(STBC)的编码与译码全流程,并配套误码率(BER)曲线绘制功能。通过实际运行即可直观对比不同信噪比下的误码性能,适合用于课程…

阅读更多 →
多Agent编排系统节点故障全解析:从租约机制到故障转移实战 2026/10/1 17:03:23

多Agent编排系统节点故障全解析:从租约机制到故障转移实战

1. 先搞清楚:一个节点"失败"到底败在哪一层1.1 我遇到的真实事故:一条链路卡死,排查半小时才找到凶手先说一个我凌晨两点处理的故障。当时线上跑着一套三个节点组成的 Agent 编排链路:节点A负责接收上游任务并拆解&…

阅读更多 →
思科Catalyst 9800无线控制器配置:Tag模型解析与开局避坑指南 2026/10/1 17:03:23

思科Catalyst 9800无线控制器配置:Tag模型解析与开局避坑指南

简介:这是一份针对思科Catalyst 9800系列无线控制器的实战配置手册,适合需要部署、调优和维护企业无线网络的工程师、运维人员,也可作为备考CCNP/CCIE无线方向的参考。内容先介绍Catalyst 9800-40的技术规格与性能指标,如最大支持…

阅读更多 →
AI资讯日更工作流:信源指纹+规则引擎+人工校验 2026/10/1 17:03:16

AI资讯日更工作流:信源指纹+规则引擎+人工校验

1. 项目概述:这不是一份“新闻简报”,而是一套可复用的AI资讯日更工作流“2026-09-22 AI最新资讯日报”这个标题乍看像一份时效性极强的媒体产品,但作为从业十年、亲手搭建过7套行业资讯系统、服务过23家科技企业内容团队的老手,我…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉