当前位置: 首页 > news >正文

【C++】高级分析 switch 语句的应用


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++

文章目录

  • 💯前言
  • 💯`switch` 语句的基本用法
    • 语法结构
    • 核心要点
    • 实例演示
      • 正确实现
    • 期望输出
    • 错误实现
      • 错误输出
  • 💯`if` 与 `switch` 语句的实现比较
    • 使用 `if` 语句
    • 使用 `switch` 语句
    • 比较分析
  • 💯错误分析与优化建议
    • 常见错误
      • 错误示例
      • 输入 `6` 的输出:
      • 问题原因
    • 优化建议
  • 💯扩展与总结
    • `if` 与 `switch` 的高级应用
  • 💯小结


在这里插入图片描述


💯前言

  • 在 C++ 中,分支语句是实现条件逻辑的核心工具,能够根据评估的条件执行特定的代码块。本文深入分析了 ifswitch 语句,探讨其设计实现优化方法,同时为其在不同场景中的应用提供了实用建议。这种分析不仅帮助程序员掌握语言的特性,还能提升代码的效率可维护性
    C++ 参考手册
    在这里插入图片描述

💯switch 语句的基本用法

switch 语句是一种多分支控制结构,尤其适用于离散值的精确匹配。通过将表达式的值与多个 case 进行匹配,程序可以高效地执行相应的代码块。其结构简单且逻辑清晰,特别适合用于需要明确分支的场景。


语法结构

switch (expression) {case value1:// 执行代码块 1break;case value2:// 执行代码块 2break;...default:// 默认代码块break;
}

核心要点

  • expression 表达式必须计算为整型类型。常见的数据类型包括 intchar
  • case value 每个 case 的值必须是常量表达式,例如数字或字符常量。
  • break 用于结束当前分支,防止“贯穿效应”导致后续 case 的代码被错误执行。
  • 缺少 break 的情况: 如果省略 break,程序会继续执行后续的所有分支,无论它们是否匹配。

实例演示

以下示例演示了如何使用 switch 语句实现一个简单的功能:计算一个整数除以 3 的余数,并根据余数输出相应的信息。


正确实现

#include <iostream>
using namespace std;int main() {int n = 0;scanf("%d", &n);switch (n % 3) {case 0:cout << "余数为 0" << endl;break;case 1:cout << "余数是 1" << endl;break;case 2:cout << "余数是 2" << endl;break;}return 0;
}

在这里插入图片描述


期望输出

输入 6 时,程序正确选择到 case 0,输出:

余数为 0

错误实现

若省略 break,程序会错误地执行所有后续的 case 代码,导致逻辑混乱:

#include <iostream>
using namespace std;int main() {int n = 0;scanf("%d", &n);switch (n % 3) {case 0:cout << "余数为 0" << endl;case 1:cout << "余数是 1" << endl;case 2:cout << "余数是 2" << endl;}return 0;
}

在这里插入图片描述


错误输出

输入 6 时,输出为:

余数为 0
余数是 1
余数是 2

由于缺少 break,程序从匹配的 case 0 开始顺序执行了所有后续分支。


💯ifswitch 语句的实现比较

为了实现类似功能,我们可以使用 if 语句。if 是一种更通用的分支语句,适用于任何条件逻辑,特别是范围判断或复合条件。


使用 if 语句

#include <iostream>
using namespace std;int main() {int n = 0;cin >> n;if (n % 3 == 0)cout << "余数为 0" << endl;else if (n % 3 == 1)cout << "余数是 1" << endl;elsecout << "余数是 2" << endl;return 0;
}

在这里插入图片描述


使用 switch 语句

#include <iostream>
using namespace std;int main() {int n = 0;scanf("%d", &n);switch (n % 3) {case 0:cout << "余数为 0" << endl;break;case 1:cout << "余数是 1" << endl;break;case 2:cout << "余数是 2" << endl;break;}return 0;
}

在这里插入图片描述


比较分析

特点if 语句switch 语句
应用范围适合复杂条件判断(如范围比较)适合离散值的精确匹配
表达式类型支持任意条件表达式仅支持整型表达式
代码可读性嵌套条件可能降低可读性结构清晰,适合多分支场景
效率顺序判断条件,效率较低直接跳转至匹配的分支,效率较高

💯错误分析与优化建议


常见错误

正如前文所述,在 switch 构造中如果缺少 break,会导致后续所有的 case 块被执行。


错误示例

#include <iostream>
using namespace std;int main() {int n = 0;scanf("%d", &n);switch (n % 3) {case 0:cout << "余数为 0" << endl;case 1:cout << "余数是 1" << endl;case 2:cout << "余数是 2" << endl;}return 0;
}

在这里插入图片描述


输入 6 的输出:

余数为 0
余数是 1
余数是 2

问题原因

缺少 break 导致“贯穿效应”,程序从匹配的 case 开始,依次执行后续所有分支。


优化建议

  • 在每个 case 块后加入 break,以避免“贯穿效应”。
  • 使用 default 分支处理未匹配的情况,确保分支逻辑覆盖全面。
  • 在复杂的逻辑判断中,优先考虑 if,以便更灵活地处理各种条件。

💯扩展与总结


ifswitch 的高级应用

  1. 分支逻辑:

    • 对于大量离散值,switch 提供了更好的可读性和可维护性。
    • 对于范围或复合条件,if 更具灵活性。
  2. 性能考虑:

    • switch 构造优化了跳转表,直接访问匹配的分支,提升了运行效率。
    • if 语句逐一评估条件,在复杂情况下可能带来较高的计算开销。
  3. 代码维护性:

    • 对于处理大规模的离散值匹配,switch 提供了更高的可读性。
    • if 在处理复杂逻辑表达式时表现出更强的适应能力。
  4. 错误防范:

    • 使用工具进行代码静态分析,帮助识别可能遗漏的 break 或逻辑漏洞。
    • 在代码审查过程中,明确标注每个 case 的功能,以便团队成员更好地理解和维护代码。

💯小结

  • 在这里插入图片描述
    switch 语句在多分支场景中表现出色,但需要注意正确使用 break 以避免“贯穿效应”。它适用于基于离散值的条件判断,尤其是在处理大量分支的情况下能提升效率和代码可读性。

  • if 语句在面对复杂的逻辑判断范围检查时,是更为灵活的工具。无论是与其他条件语句的嵌套使用,还是处理动态逻辑,它都表现出色。

  • 程序员应根据具体场景选择合适的工具,在代码效率维护性之间取得平衡。对于大型项目,结合静态分析工具代码审查,可以进一步提升代码质量,减少潜在问题。


在这里插入图片描述


在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

相关文章:

【C++】高级分析 switch 语句的应用

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;switch 语句的基本用法语法结构核心要点实例演示正确实现 期望输出错误实现错误输出 &#x1f4af;if 与 switch 语句的实现比较使用 if 语句使用 switch 语句比较分析 &am…...

活动预告 | Surface 来了#11:Windows 11 AI+ PC,释放 AI 办公设备的无限潜能

课程介绍 欢迎来到 Surface 来了第 11 期节目。 今年 5 月底&#xff0c;微软推出了专为 AI 体验而设计的全新 Windows PC 品类&#xff1a;Windows 11 AI PC。 微软通过 Windows 11 AI PC&#xff0c;进一步强调了 NPU 在运行设备端 AI 功能的重要性。并要求符合这一品类的…...

php基础:正则表达式

1.正则表达式 正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。到目前为止&#xff0c;我们前面所用过的精确&#xff08;文本&#xff09;匹配也是一种正则表达式。 在PHP中&#xff0c;正则表达式一般是由正规字…...

go语言压缩[]byte数据为zlib格式的时候,耗时较多,应该怎么修改?

在Go语言中使用compress/flate包来实现Zlib格式的压缩时&#xff0c;如果发现压缩耗时较多&#xff0c;可以考虑以下几个优化方向&#xff1a; ### 1. 压缩级别 默认情况下&#xff0c;compress/flate包中的NewWriter函数使用的是默认压缩级别&#xff08;BestSpeed和BestComp…...

[机器学习]AdaBoost(数学原理 + 例子解释 + 代码实战)

AdaBoost AdaBoost&#xff08;Adaptive Boosting&#xff09;是一种Boosting算法&#xff0c;它通过迭代地训练弱分类器并将它们组合成一个强分类器来提高分类性能。 AdaBoost算法的特点是它能够自适应地调整样本的权重&#xff0c;使那些被错误分类的样本在后续的训练中得到…...

深入了解Spring

目录 Spring基础 什么是Spring框架&#xff1f; Spring 包含的模块有哪些&#xff1f; Core Container AOP Data Access/Integration Spring Web Messaging Spring Test Spring,Spring MVC,Spring Boot 之间什么关系? Spring基础 什么是Spring框架&#xff1f; Sp…...

jar 包如何下载

maven官网&#xff1a;https://mvnrepository.com/ 点击搜索&#xff0c;找对应搜索结果点击...

ESlint代码规范,手动与自动修复

规范说明 规则参考 - ESLint - 插件化的 JavaScript 代码检查工具 规范说明 ​ ​ 可看到是main.js文件报错分别是第三行第30个字符&#xff0c;以及第七行第一个字符 后面则是规范说明&#xff0c;可以根据说明查找相应的规范 一.手动修正 ctrl f 可以搜索 二.自动修正 …...

利用编程获得money?

在当今数字化时代&#xff0c;编程技能为人们开辟了众多赚钱途径。无论你是编程新手还是经验丰富的开发者&#xff0c;都能在广阔的市场中找到适合自己的盈利方式。以下是一份详细的用编程赚钱指南。 一、自由职业平台 像 Upwork、Freelancer 和 Fiverr 等知名自由职业平台&am…...

设计规规范:【App 配色】

文章目录 引言I App 配色组成色彩象征 & 联想II 知识扩展设计流程图UI设计交互设计UI交互设计引言 设计规范,保持设计一致性,提高设计效率。宏观上对内统一,管理与合作变得容易。 按类型管理颜色、文本样式、图标、组件(symbol)。 蓝湖设计规范云 https://lanhuapp.co…...

react 使用 PersistGate 白屏解决方案

我在全局添加 PersistGate 组件后报错了 报错信息如下&#xff1a; Uncaught Error: A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped wi…...

F5中获取客户端ip地址(client ip)

当F5设备对其原始设置上的所有IP地址使用NAT时&#xff0c;连接到poo成员&#xff08;nodes、backend servers&#xff09;的出站连接将是NAT IP地址。 pool 成员&#xff08;nodes、backend servers&#xff09;将无法看到真实的客户端 ip地址&#xff0c;因为看到的是F5上的…...

Maven(生命周期、POM、模块化、聚合、依赖管理)详解

目录 Maven构建项目的生命周期 Maven的常用命令 POM 依赖管理 依赖导入 依赖范围设置 依赖版本维护 依赖传递 依赖冲突 解决依赖冲突的方法 使用maven提供的依赖调节原则 排除依赖&#xff0c;排除依赖的jar包 锁定版本 项目模块化 Maven项目的继承 Maven项目…...

电力场景绝缘子缺陷识别分割数据集labelme格式1099张3类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;1099 标注数量(json文件个数)&#xff1a;1099 标注类别数&#xff1a;3 标注类别名称:["brokenpart","brokeninsulator…...

【k8s集群应用】Kubernetes 容器编排系统

文章目录 Kubernetes 容器编排系统背景与发展Kubernetes 基本概念Kubernetes 集群架构与组件Kubernetes 核心组件Master 组件配置存储中心Node 组件 Kubernetes核心概念1. Pod2. Pod控制器3. Label与Label选择器4. Service5. Ingress6. Volume7. Name与Namespace K8S创建Pod资源…...

Unity3D仿星露谷物语开发2之工程初始化

1、依赖包安装 进入【Window -> Package Manager】 安装如下插件&#xff1a; 1&#xff09;Cinemachine 它是一套专门控制Unity Camera的模块&#xff0c;适用于各种游戏场景中物体的移动变化&#xff0c;解决了许多关于摄像机间的复杂控制&#xff0c;混合&#xff0c…...

Kafka篇之参数优化进而提高kafka集群性能

1. Kafka性能优化分类 Kafka集群的性能优化涉及多个方面&#xff0c;包括硬件资源、网络、配置文件参数等。 调优目标通常是为了提高吞吐量、减少延迟、提升稳定性和故障恢复能力。 以下是Kafka集群调优的常见策略&#xff0c;以及调优后的配置文件示例。 1. 硬件资源调优 C…...

关于SAP Router连接不稳定的改良

这个也是网上看来的&#xff0c;之前在用的时候也在想是不是建立一个长连接&#xff0c;就不至于断线。今天正好看到。 关于SAP Router连接不稳定的改良 我们在使用SAPRouter时经常会碰到断线&#xff0c;其发生原因有很多&#xff0c;如&#xff1a;网络不稳定、操作间隔时间…...

使用pygame做游戏(2):2048游戏的进一步改造,以失败告终

前言 受《Python树莓派编程从零开始》里的示例启发&#xff0c;我决定将上篇的2048游戏进行“面向对象化”改造。 这次除了要建立一些对象&#xff0c;还要能有移动效果&#xff0c;并能显示中文。 另外我还发现一个bug&#xff1a;方块放满了不代表输了&#xff0c;还要检查能…...

【CSS in Depth 2 精译_078】12.6 调整字间距,提升可读性 + 12.7 本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体12.3 谷歌字体12.4 font-fac…...

WorkshopDL:跨平台工具实现Steam创意工坊资源获取的技术方案

WorkshopDL&#xff1a;跨平台工具实现Steam创意工坊资源获取的技术方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 在多平台游戏生态中&#xff0c;玩家常面临创意内容获取…...

如何用vJoy虚拟手柄驱动打造终极个性化游戏控制方案?免费开源教程指南

如何用vJoy虚拟手柄驱动打造终极个性化游戏控制方案&#xff1f;免费开源教程指南 【免费下载链接】vJoy Virtual Joystick 项目地址: https://gitcode.com/gh_mirrors/vj/vJoy 在游戏世界中&#xff0c;你是否曾因物理手柄的局限性而感到困扰&#xff1f;键盘操作缺乏平…...

从架构视角理解OBS虚拟摄像头:技术设计与实践路径

从架构视角理解OBS虚拟摄像头&#xff1a;技术设计与实践路径 【免费下载链接】obs-virtual-cam obs-studio plugin to simulate a directshow webcam 项目地址: https://gitcode.com/gh_mirrors/ob/obs-virtual-cam OBS VirtualCam是一个基于DirectShow技术框架的OBS S…...

别再只问原理了!用Spring Cloud Gateway + Redis手把手搭建分布式令牌桶限流(附完整配置)

实战指南&#xff1a;Spring Cloud Gateway与Redis构建分布式令牌桶限流系统 微服务架构下&#xff0c;流量管控如同城市交通信号灯——没有合理的红绿灯设计&#xff0c;再宽阔的道路也会陷入瘫痪。最近在帮一家跨境电商平台重构网关层时&#xff0c;我们仅用Spring Cloud Gat…...

yz-bijini-cosplay部署案例:Z-Image底座免重载,4090显卡高效出图

yz-bijini-cosplay部署案例&#xff1a;Z-Image底座免重载&#xff0c;4090显卡高效出图 1. 项目简介 yz-bijini-cosplay是一个专门为RTX 4090显卡优化的Cosplay风格文生图解决方案。这个项目基于通义千问官方的Z-Image端到端Transformer底座&#xff0c;深度集成了yz-bijini…...

星思半导体系统级通信测试实验室设备齐全,为卫星通信芯片验证提供坚实保障

随着政府工作报告首次为卫星互联网“定调”&#xff0c;资本市场的聚光灯迅速转向这条黄金赛道。业内观察指出&#xff0c;2026年的市场关注点更加务实&#xff0c;聚焦于真正具备核心技术、能参与国际竞争的上游“硬科技”企业。在政策与资本的同频共振下&#xff0c;以星思半…...

[特殊字符]OpenClaw 优化系列(三):基于WSL的OpenClaw备份恢复与文件交互

告别环境崩塌恐惧症&#xff0c;一文掌握WSL下OpenClaw的数据安全与高效操作 Windows下WSL环境准备已经在前面讲了&#xff1a;&#x1f99e; OpenClaw 部署环境准备&#xff1a;Windows下WSL安装及配置全攻略。至于OpenClaw部署&#xff0c;教程已经很多很多了&#xff0c;只…...

GLM-4.1V-9B-Base算法应用:融合LSTM时序预测的智能视频内容分析平台

GLM-4.1V-9B-Base算法应用&#xff1a;融合LSTM时序预测的智能视频内容分析平台 1. 引言&#xff1a;当视频分析遇上多模态AI 想象一下这样的场景&#xff1a;一个商场监控室里&#xff0c;安保人员需要同时盯着几十个监控画面&#xff1b;或者一个短视频平台的内容审核团队&…...

OpenClaw安全配置指南:Qwen3-4B模型权限与操作边界管理

OpenClaw安全配置指南&#xff1a;Qwen3-4B模型权限与操作边界管理 1. 为什么需要特别关注OpenClaw的安全配置 上周我在调试一个自动整理文档的OpenClaw任务时&#xff0c;差点酿成大祸。当时我让AI助手帮我整理桌面上的项目资料&#xff0c;结果它"聪明"地把所有文…...

一站式数据健康解决方案:docta项目架构与核心组件深度剖析

一站式数据健康解决方案&#xff1a;docta项目架构与核心组件深度剖析 【免费下载链接】docta A Doctor for your data 项目地址: https://gitcode.com/gh_mirrors/do/docta docta作为一款强大的数据健康诊断工具&#xff0c;能够帮助用户轻松检测和修复数据集中的标签错…...