C语言switch case语句详解(非常详细)

embedded/2025/2/7 13:31:01/

在C语言中,switch case 语句是一种多分支选择结构,用于根据变量的值执行不同的代码块。

相比于if else语句,switch case在处理多个固定值的条件判断时更加简洁和高效。本文将详细讲解switch case语句的用法、语法格式、实例代码、注意事项,以及与if else语句的区别。

1. switch case 语句的基本用法

switch case语句通过匹配一个变量的值,选择执行对应的代码块。它的核心思想是“值匹配”,即根据变量的值跳转到相应的case分支。

语法格式:

switch (表达式) {case 常量1:// 当表达式的值等于常量1时执行的代码break;case 常量2:// 当表达式的值等于常量2时执行的代码break;...default:// 当表达式的值不匹配任何case时执行的代码
}

代码执行流程:

  1. 计算switch后面表达式的值。

  2. 将表达式的值与每个case后的常量进行比较。

  3. 如果找到匹配的case,则执行对应的代码块,直到遇到break语句或switch语句结束。

  4. 如果没有匹配的case,则执行default块中的代码(如果有)。

2. 实例代码

以下是一个简单的switch case示例,根据用户输入的数字输出对应的星期几:

#include <stdio.h>int main() {int day;printf("请输入一个数字(1-7):");scanf("%d", &day);switch (day) {case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 7:printf("星期日\n");break;default:printf("输入错误,请输入1-7之间的数字!\n");}return 0;
}

代码解释:

  • day是用户输入的数字,switch会根据day的值跳转到对应的case分支。

  • 如果day的值为1,输出"星期一",然后遇到break语句,跳出switch

  • 如果day的值不在1-7之间,执行default块中的代码,提示输入错误。

3. switch case 语句的注意事项

(1)break语句的作用

  • break语句用于结束当前case的执行,跳出switch语句。

  • 如果没有break,程序会继续执行后续的case代码块,直到遇到breakswitch结束。这种现象称为“case穿透”。

示例:
#include <stdio.h>int main() {int num = 2;switch (num) {case 1:printf("执行case 1\n");case 2:printf("执行case 2\n");  // 因为没有break,继续执行下一个casecase 3:printf("执行case 3\n");default:printf("执行default\n");}return 0;
}

输出:

执行case 2
执行case 3
执行default

(2)default块的作用

  • default块是可选的,用于处理所有case都不匹配的情况。

  • 如果没有default,且所有case都不匹配,则switch语句不执行任何代码。

(3)case后的常量必须是整型或字符型

  • switch的表达式和case后的常量必须是整型(如int)或字符型(如char),不能是浮点型或字符串。

(4)case常量不能重复

  • 每个case后的常量值必须唯一,不能有重复。

4. switch case 与if else的区别

(1)适用场景

  • switch case:适用于对固定值的条件判断,尤其是当变量的值有多个明确的选项时(如菜单选择、状态码等)。

  • if else:适用于对范围或复杂条件的判断(如x > 10 && y < 20)。

(2)代码结构

  • switch case:结构清晰,适合多分支选择。

  • if else:结构灵活,适合处理复杂的逻辑。

(3)性能

  • switch case:在某些编译器中,switch case会被优化为跳转表,执行效率较高。

  • if else:需要依次判断每个条件,效率较低。

示例对比:

// 使用 if else
if (day == 1) {printf("星期一\n");
} else if (day == 2) {printf("星期二\n");
} else if (day == 3) {printf("星期三\n");
} else {printf("输入错误\n");
}// 使用 switch case
switch (day) {case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;default:printf("输入错误\n");
}

5. 总结

  • switch case语句是一种高效的多分支选择结构,适用于对固定值的条件判断。

  • break语句用于防止“case穿透”,确保只执行匹配的case代码块。

  • default用于处理未匹配的情况,是可选的。

  • if else的区别switch case适合处理固定值的多分支选择,而if else适合处理范围或复杂条件。

在实际编程中,应根据具体需求选择合适的条件控制语句。如果条件判断是基于固定值的,优先使用switch case;如果条件判断涉及范围或复杂逻辑,则使用if else。掌握这两种语句的使用场景和技巧,能够帮助你编写更加高效和清晰的代码。


http://www.ppmy.cn/embedded/160309.html

相关文章

Hive修复分区

Hive修复分区 简介 Hive的MSCK REPAIR TABLE命令用于修复&#xff08;即添加丢失的&#xff09;表分区。通常用于那些已在HDFS中存在&#xff0c;但尚未在Hive元数据中注册的分区。 当你在HDFS文件系统中手动添加或删除分区目录&#xff0c;Hive并不会自动识别这些更改。为同步…

网络安全——Span 安全监控

SPAN释义&#xff1a; SPAN技术我们可以把交换机上某些想要被监控端口&#xff08;以下简称受控端口&#xff09;的数据流COPY或MIRROR一 份&#xff0c;发送给连接在监控端口上的流量分析仪&#xff0c;比如CISCO的IDS或是装SNIFFE工具的PC受控端口和 监控端口可以在同一台交…

(2024|Nature Medicine,生物医学 AI,BiomedGPT)面向多种生物医学任务的通用视觉-语言基础模型

BiomedGPT: A generalist vision–language foundation model for diverse biomedical tasks 目录 1. 摘要 2. 引言 3. 相关研究 3.1 基础模型与通用生物医学 AI 3.2 生物医学 AI 的局限性 3.3 BiomedGPT 的创新点 4. 方法 4.1 架构及表示 4.1.1 模型架构选择 4.1.2 …

LabVIEW自定义测量参数怎么设置?

以下通过一个温度采集案例&#xff0c;说明在 LabVIEW 中设置自定义测量参数的具体方法&#xff1a; 案例背景 ​ 假设使用 NI USB-6009 数据采集卡 和 热电偶传感器 监测温度&#xff0c;需自定义以下参数&#xff1a; 采样率&#xff1a;1 kHz 输入量程&#xff1a;0~10 V&a…

MySQL的 MVCC详解

MVCC是多版本并发控制&#xff0c;允许多个事务同时读取和写入数据库&#xff0c;而无需互相等待&#xff0c;从而提高数据库的并发性能。 在 MVCC 中&#xff0c;数据库为每个事务创建一个数据快照。每当数据被修改时&#xff0c;MySQL不会立即覆盖原有数据&#xff0c;而是生…

chrome插件模板;使用 React 18 和 Webpack 5 的 Chrome 扩展样板

一、软件介绍&#xff08;文末提供下载&#xff09; 这是一个基本的 Chrome 扩展样板&#xff0c;可帮助您编写模块化和现代的 Javascript 代码&#xff0c;轻松加载 CSS&#xff0c;并在代码更改时自动重新加载浏览器。 github地址&#xff1a;https://github.com/lxieyang/c…

【Block总结】MDCR,多尺度深度可分离卷积,捕捉不同感受野范围的空间特征

论文信息 HCF-Net&#xff08;Hierarchical Context Fusion Network&#xff09;是一种新提出的深度学习模型&#xff0c;专门用于红外小目标检测。该论文于2024年3月16日发布&#xff0c;作者包括Shibiao Xu、ShuChen Zheng等&#xff0c;主要研究机构为北京邮电大学。该模型…

Spring Boot实现多数据源连接和切换

文章目录 前言一、多数据源配置与切换方案二、实现步骤 1. 创建多个 DataSource 配置类2. 创建 DataSource 配置类3. 创建动态数据源路由类4. 实现 DynamicDataSource 类5. 创建 DataSourceContextHolder 来存储当前的数据源标识6. AOP 方式切换数据源7. 自定义注解来指定数据…