2026/5/18 10:57:43
网站建设
项目流程
网站怎么申请微信认证,mip网站案例,深圳品牌网站建设公司有哪些,简易的建筑人才网C 流程控制语句#xff1a;构建结构化程序的核心逻辑
流程控制语句是结构化编程#xff08;Structured Programming#xff09;的三大支柱之一#xff08;顺序、选择、循环#xff09;#xff0c;它们决定了程序“下一步该执行哪一段代码”。C 继承了 C 的控制结构…C 流程控制语句构建结构化程序的核心逻辑流程控制语句是结构化编程Structured Programming的三大支柱之一顺序、选择、循环它们决定了程序“下一步该执行哪一段代码”。C 继承了 C 的控制结构并保持了向后兼容性同时在现代 C 中鼓励更清晰、更安全的写法。1. 结构化编程三大基本结构Dijkstra 1968 提出顺序结构代码从上到下依次执行默认选择结构根据条件执行不同代码块if / else / switch循环结构重复执行某段代码for / while / do-whilegoto被认为破坏结构化“ spaghetti code”现代 C 强烈不推荐在普通代码中使用。2. 选择结构Selection / Branching2.1 if / else / else if最常用、最灵活的选择结构。if(condition1){// ...}elseif(condition2){// ...}else{// ...}现代写法建议C17if(autoitm.find(key);it!m.end()){// 使用 it-second}else{// 未找到}2.2 switch多路分支适合离散值判断整数、枚举、字符比多重 if-else 更清晰。switch(grade){caseA:std::cout优秀\n;break;caseB:std::cout良好\n;break;caseC:caseD:std::cout及格\n;break;default:std::cout不及格\n;}C17 新特性初始化语句switch(intcodegetErrorCode();code){case0:/* OK */break;case-1:/* 失败 */break;default:/* 未知 */break;}注意缺少break会贯穿fall-through有时故意用标注[[fallthrough]];C17表达式必须是整型/枚举/可转换为整型的类型C20 前不能直接用 string3. 循环结构Iteration / Looping循环类型适用场景至少执行次数条件检查时机现代 C 推荐指数for已知循环次数、范围遍历0 次进入前★★★★★while未知次数、直到条件不满足0 次进入前★★★★☆do-while至少执行一次如菜单、输入验证1 次结束时★★★☆☆范围 for容器/数组遍历C110 次—★★★★★3.1 经典 for 循环三部分写法for(inti0;i10;i){// ...}C17 带初始化for(size_t i0;autoelem:vec;i){// 既能用索引 i也能用 elem}3.2 范围 forrange-based for loop——现代首选std::vectorintv{1,2,3,4,5};// 读for(intx:v){...}// 拷贝for(constautox:v){...}// 推荐避免拷贝for(autox:v){x*2;}// 可修改// C20 带索引需要 ranges 或第三方for(auto[i,elem]:std::views::enumerate(v)){std::couti: elem\n;}3.3 while 与 do-whilewhile(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 (C17)多分支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 bindingsC17解构 pair/tuple尽量避免深层嵌套超过 3 层考虑提函数用RAII 早返回代替 goto 和深层 if-else无限循环用for(;;)而不是while(1)更清晰意图你现在最常写的循环是哪一种项目里有没有特别讨厌的多层嵌套 if / 循环或者想看某个具体场景的现代写法对比比如处理输入验证、状态机、遍历嵌套容器等可以直接告诉我