news 2026/6/9 22:08:16

C++流程控制语句:构建结构化程序的核心逻辑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++流程控制语句:构建结构化程序的核心逻辑

C++ 流程控制语句:构建结构化程序的核心逻辑

流程控制语句是结构化编程(Structured Programming)的三大支柱之一(顺序、选择、循环),它们决定了程序“下一步该执行哪一段代码”。C++ 继承了 C 的控制结构,并保持了向后兼容性,同时在现代 C++ 中鼓励更清晰、更安全的写法。

1. 结构化编程三大基本结构(Dijkstra 1968 提出)

  • 顺序结构:代码从上到下依次执行(默认)
  • 选择结构:根据条件执行不同代码块(if / else / switch)
  • 循环结构:重复执行某段代码(for / while / do-while)

goto被认为破坏结构化(“ spaghetti code”),现代 C++ 强烈不推荐在普通代码中使用。

2. 选择结构(Selection / Branching)

2.1 if / else / else if

最常用、最灵活的选择结构。

if(condition1){// ...}elseif(condition2){// ...}else{// ...}

现代写法建议(C++17+):

if(autoit=m.find(key);it!=m.end()){// 使用 it->second}else{// 未找到}
2.2 switch(多路分支)

适合离散值判断(整数、枚举、字符),比多重 if-else 更清晰。

switch(grade){case'A':std::cout<<"优秀\n";break;case'B':std::cout<<"良好\n";break;case'C':case'D':std::cout<<"及格\n";break;default:std::cout<<"不及格\n";}

C++17 新特性:初始化语句

switch(intcode=getErrorCode();code){case0:/* OK */break;case-1:/* 失败 */break;default:/* 未知 */break;}

注意

  • 缺少break贯穿(fall-through),有时故意用(标注[[fallthrough]];C++17+)
  • 表达式必须是整型/枚举/可转换为整型的类型(C++20 前不能直接用 string)

3. 循环结构(Iteration / Looping)

循环类型适用场景至少执行次数条件检查时机现代 C++ 推荐指数
for已知循环次数、范围遍历0 次进入前★★★★★
while未知次数、直到条件不满足0 次进入前★★★★☆
do-while至少执行一次(如菜单、输入验证)1 次结束时★★★☆☆
范围 for容器/数组遍历(C++11+)0 次★★★★★
3.1 经典 for 循环(三部分写法)
for(inti=0;i<10;++i){// ...}

C++17+ 带初始化

for(size_t i=0;auto&elem:vec;++i){// 既能用索引 i,也能用 elem}
3.2 范围 for(range-based for loop)——现代首选
std::vector<int>v={1,2,3,4,5};// 读for(intx:v){...}// 拷贝for(constauto&x:v){...}// 推荐:避免拷贝for(auto&x:v){x*=2;}// 可修改// C++20+ 带索引(需要 <ranges> 或第三方)for(auto[i,elem]:std::views::enumerate(v)){std::cout<<i<<": "<<elem<<'\n';}
3.3 while 与 do-while
while(condition){// 可能一次都不执行}do{// 至少执行一次}while(condition);

经典使用 do-while 的场景:

  • 强制用户输入正确格式
  • 菜单循环(先显示菜单再判断是否退出)

4. 循环控制语句:改变默认流程

语句作用适用范围注意事项
break立即跳出当前循环 / switchfor/while/do/switch只跳出最近一层循环
continue跳过本次循环剩余部分,进入下一次for/while/do不跳出循环,只跳过当前迭代
goto无条件跳转到标签任意位置强烈不推荐(除极特殊错误处理外)
return立即结束当前函数,返回值函数体内可带返回值,也可 void 函数用 return;

现代替代 goto 的写法(RAII + 作用域):

// 不要这样写 gotoif(error)gotocleanup;// 推荐:用作用域 + RAII{Resource r1;// 自动析构if(error1)returnerror_code;Resource r2;if(error2)returnerror_code;// 正常逻辑}

5. 快速对比总结表(面试/复习用)

控制结构关键字执行次数典型场景现代 C++ 偏好写法
单分支if0~1简单条件判断if constexpr (C++17)
多分支if-else / switch0~1枚举、状态机、菜单switch + [[fallthrough]]
计数循环for0~N已知次数、数组遍历range-based for + std::views
条件循环while0~N未知次数、读取直到 EOFwhile (std::cin >> x)
先执行后判断do-while1~N至少一次(如输入验证)
无限循环for(;😉 / while(true)直到 break服务器主循环、游戏循环for(;😉 { … if (quit) break; }

6. 现代 C++ 推荐的“结构化”心态

  • 优先用范围 for遍历容器
  • if 初始化if constexpr减少嵌套
  • structured bindings(C++17)解构 pair/tuple
  • 尽量避免深层嵌套(超过 3 层考虑提函数)
  • RAII + 早返回代替 goto 和深层 if-else
  • 无限循环用for(;;)而不是while(1)(更清晰意图)

你现在最常写的循环是哪一种?
项目里有没有特别讨厌的多层嵌套 if / 循环?
或者想看某个具体场景的现代写法对比(比如处理输入验证、状态机、遍历嵌套容器等),可以直接告诉我~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 20:12:09

基于Spring Boot和Activiti6的工作流OA系统设计与实现

基于Spring Boot和Activiti6的工作流OA系统设计与实现 基于Spring Boot和Activiti6的工作流OA系统&#xff1a;企业级应用开发的完美实践 在当今数字化时代&#xff0c;企业对于高效、安全的办公自动化系统需求日益增长。工作流OA系统作为企业信息化建设的核心组成部分&#…

作者头像 李华
网站建设 2026/6/8 18:57:05

基于Spring Boot与Vue的学习教程网站系统设计与实现

基于Spring Boot与Vue的学习教程网站系统设计与实现 基于Spring Boot与Vue的学习教程网站系统&#xff1a;毕业设计源码与论文资源详解 在当今数字化教育时代&#xff0c;在线学习平台已成为知识传播的重要渠道。对于计算机科学或软件工程专业的学生而言&#xff0c;一个功能…

作者头像 李华
网站建设 2026/6/8 20:14:47

基于Springcloud的智能社区服务系统毕业论文+PPT(附源代码+演示视频)

文章目录 一、项目简介1.1 运行视频1.2 &#x1f680; 项目技术栈1.3 ✅ 环境要求说明1.4 包含的文件列表 前台运行截图后台运行截图项目部署源码下载 一、项目简介 项目基于SpringBoot框架&#xff0c;前后端分离架构&#xff0c;后端为SpringBoot前端Vue。基于SpringCloud的…

作者头像 李华
网站建设 2026/6/9 1:58:39

学术数据魔法师:书匠策AI如何让你的教育研究“数据开口说话”

在教育研究的江湖里&#xff0c;数据是“武功秘籍”&#xff0c;分析是“内功心法”。但面对堆积如山的数据、晦涩难懂的统计术语&#xff0c;许多研究者&#xff08;尤其是学生党&#xff09;常常陷入“数据焦虑”——明明想用数据证明观点&#xff0c;却被工具卡脖子&#xf…

作者头像 李华
网站建设 2026/6/9 0:49:28

能见度监测站 10/50km

Q1&#xff1a;50km能见度监测站的核心定位是什么&#xff1f;与普通能见度监测设备有何不同&#xff1f;A&#xff1a;核心定位是“超远量程能见度精准监测终端”&#xff0c;专注解决低能见度天气下的监测盲区问题&#xff0c;适配公路、高速、机场等对能见度监测要求较高的出…

作者头像 李华
网站建设 2026/6/9 1:01:56

书匠策AI:教育论文的“数据炼金术士”,让数字开口说话的秘密武器——当数据分析不再是“技术苦役”,而是学术创作的灵感源泉

在学术写作的江湖里&#xff0c;数据是“论点的骨骼”&#xff0c;分析是“逻辑的血液”。但面对堆积如山的数据表格、晦涩难懂的统计术语&#xff0c;许多教育研究者常陷入“数据焦虑”&#xff1a;如何让枯燥的数字变成有说服力的故事&#xff1f;如何让复杂的分析变得像拼乐…

作者头像 李华