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

devtools/2025/2/7 7:07:32/

在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/devtools/156745.html

相关文章

python migate执行报错

一、背景 前期手工调整了数据库表字段&#xff0c;导致django的makemigrations目录下的文件结构不一致&#xff0c;再次更新models.py时&#xff0c;执行报错&#xff1a; django.db.utils.OperationalError: (1054, "Unknown column tag in records_record") 执行 p…

Swan 表达式 - 算数表达式

ANSYS Swan 语言表达式中&#xff0c;支持算数表达式。支持的算数表达式包括 , -, *, /, mod, 一元-, 数值类型转换 :> 等。 为算数加法&#xff0c;示例如 function addExpr (i1: int32; i2: int32) returns (o1: int32) {let o1 i1 i2; }- 为算数减法&#xff0c;示例如…

ASP.NET Core中间件Markdown转换器

目录 需求 文本编码检测 Markdown→HTML 注意 实现 需求 Markdown是一种文本格式&#xff1b;不被浏览器支持&#xff1b;编写一个在服务器端把Markdown转换为HTML的中间件。我们开发的中间件是构建在ASP.NET Core内置的StaticFiles中间件之上&#xff0c;并且在它之前运…

IOPS与吞吐量、读写块大小及延迟之间的关系

IOPS&#xff08;每秒输入/输出操作次数&#xff09;、吞吐量、读写块大小及延迟是衡量存储系统性能的四个关键指标&#xff0c;它们之间存在密切的关系。以下从多个方面详细说明这些指标之间的关系&#xff1a; 1. IOPS与吞吐量的关系 公式关系&#xff1a;吞吐量&#xff0…

8.攻防世界Web_php_wrong_nginx_config

进入题目页面如下 尝试弱口令密码登录 一直显示网站建设中&#xff0c;尝试无果&#xff0c;查看源码也没有什么特别漏洞存在 用Kali中的dirsearch扫描根目录试试 命令&#xff1a; dirsearch -u http://61.147.171.105:53736/ -e* 登录文件便是刚才登录的界面打开robots.txt…

C中静态库和动态库的使用

2.使用尖括号包括 如果要使用尖括号包括头文件,有两种方法 1.将头文件移动到标准头文件目录,linux为/usr/local/include.windows下为C:\MinGW\include 2.编译时指定头文件目录,gcc -I/头文件目录 … 编译时-I参数就是用于指定头文件目录 3.静态库 将文件编译为静态库,可以…

Oracle 创建JOB调用存储过程自动归档删除LOG类表

-- 查询定时任务的语句: SELECT * FROM user_scheduler_jobs; -- 查询所有用户的定时任务: SELECT * FROM ALL_SCHEDULER_JOBS; -- 注意定时任务的OWNER -- 查询定时任务执行的LOG表: SELECT * FROM user_scheduler_job_log WHERE job_name = JOB_PROC_QUALITY_STATISTICS_…

漏洞管理:筑牢网络安全防线的关键环节

在当今数字化时代&#xff0c;网络漏洞如同隐藏在系统深处的“地雷”&#xff0c;一旦被触发&#xff0c;可能引发数据泄露、系统瘫痪等一系列严重后果。因此&#xff0c;漏洞管理成为保障网络安全的重中之重。九河云来和大家聊一聊漏洞管理的相关知识把。 漏洞管理是一个系统…