首页 >> 生活百科 >

c 语言中 switch 的用法 多分支等值选择语句详解

2026-11-05 09:09:43 来源:网易 编辑:吉子英 

核心结论就是 switch 是 C 语言专门用于多分支等值判断的选择语句,适合同一个变量或者表达式有多个固定取值,需要根据不同取值执行对应代码的场景,它由 switch 关键字,case 分支标签,break 跳转语句,default 兜底分支组成,和连续 if else 相比,分支数量多的时候结构更加清晰,编译器还可以优化生成跳转表提升执行速度,但是它有明确限制,括号内表达式结果只能是整型字符型枚举类型,case 后面必须写编译期常量,不能写变量,最容易出错的点就是忘记 break 造成 case 穿透,很多初学者写出来的程序运行结果和预期不一致,大多都是这个原因。之所以 C 语言设计 switch 语句,是因为当分支很多的时候,连续书写多个 else if 代码冗长,阅读维护困难,switch 专门针对等值匹配场景做语法封装,把每一个取值对应的分支独立标记,让代码逻辑直观,但是它也有明显短板,没办法直接做区间判断,比如大于 10 小于 20 这类条件,这种场景仍然要使用 if 语句。

一 switch 基础语法结构

switch 括号内填写待判断表达式

case 常量 1 冒号

分支代码

break

case 常量 2 冒号

分支代码

break

default 冒号

兜底代码

break

各个组成部分作用

switch 关键字,后面括号里面表达式运算结果必须是 int char short long enum 这类整型相关类型,不支持 float double,也不能是字符串。

case 标签,后面必须是常量,同一个 switch 内部所有 case 常量不能重复,匹配成功之后就进入这个分支执行代码。

break 语句,作用是跳出整个 switch 结构,如果省略 break,执行完当前 case 之后不会停止,继续向下执行后面 case 代码,这个现象叫做 case 穿透。

default 分支,属于可选分支,所有 case 都匹配失败的时候才会执行,推荐写在所有 case 末尾,主要用来处理非法输入异常值。

二 switch 和 if 多分支对比表

对比项目switch 语句if else 多分支
判断类型只支持等值匹配支持等值区间大小比较逻辑运算
表达式类型仅限整型字符枚举支持所有可判定真假的表达式
分支特点适合固定取值多分支适合区间复杂条件
性能分支多可生成跳转表分支多时代码冗长
case 要求必须是编译期常量条件可以使用变量

三 详细使用步骤

第一步 确认业务场景,判断是否是等值多分支,如果是区间判断,不要选用 switch 语句。

第二步 确定判断变量,变量类型选择 int char 或者枚举类型。

第三步 书写 switch 关键字,括号内填入这个变量或者表达式。

第四步 依次编写 case 标签,每一个 case 后面填写唯一常量,编写对应的业务代码,普通独立分支末尾添加 break。

第五步 根据业务需求增加 default 兜底分支,处理不匹配所有 case 的异常输入。

第六步 编译运行,逐个测试每一个 case 对应的取值,同时测试非法值,验证 default 是否触发,重点检查是否出现意外穿透。

第七步 如果需要多个 case 共用同一段代码,可以主动省略 break,实现穿透复用,这种写法建议增加注释,方便后续代码维护。

四 深度重点知识

case 穿透不是错误,是 C 语言允许的语法特性,很多场景会主动利用,比如 case1 case2 case3 后面不写 break,三个取值共用后面同一段处理代码。

switch 支持嵌套,也就是 switch 内部再写一套 switch,嵌套的时候 break 只会跳出最近一层 switch,不会一次性跳出外层 switch,这点非常容易理解错误。

同一个 switch 内部只能存在一个 default,不能写多个 default 标签,否则编译报错。

case 后面不能写变量,也不能写表达式计算之后的值,必须是编译阶段就确定的常量。

枚举类型配合 switch 是非常经典用法,枚举成员本身就是整型常量,适合状态机编程,很多编译器还会开启警告,如果枚举新增成员但是没有对应 case,会提示补充分支。

五 高频踩坑要点

第一 case 后面写变量,编译直接报错。

第二 把浮点数放进 switch 括号,switch 不支持小数判断,小数等值本身还有精度误差问题。

第三 普通独立分支忘记 break,发生穿透,程序结果异常。

第四 误以为 default 必须放在最后,放在前面又没有 break,造成逻辑混乱。

第五 嵌套 switch 的时候误以为 break 可以一次性跳出全部外层 switch。

第六 case 常量重复,编译报错。

问题 1 c 语言中 switch 的用法里 break 可以省略吗

回答 1 c 语言中 switch 的用法里面 break 可以省略,省略之后会触发 case 穿透,普通独立分支省略 break 会造成逻辑错误,需要多个分支共用代码的时候可以主动省略 break。

问题 2 c 语言中 switch 的用法为什么不能判断浮点数

回答 2 c 语言中 switch 的用法规定括号内表达式只能是整型字符枚举类型,浮点数存在精度误差,等值判断本身不稳定,所以 c 语言中 switch 的用法不支持浮点数判断,小数多分支改用 if else。

问题 3 c 语言中 switch 的用法里面 default 是必须写吗

回答 3 c 语言中 switch 的用法里面 default 属于可选分支,不是强制书写,如果业务确定所有取值都被 case 覆盖可以省略,做用户输入交互程序推荐加上 default 做异常兜底。

本文内容仅作为 C 语言 switch 语句相关语法学习参考,不同 C 语言编译器对 switch 相关语法警告优化细节存在细微差异,实际项目开发请参考编译器官方文档,本文不对按照本文代码运行产生的逻辑错误编译报错等问题承担相关责任。

 

相关阅读

最新文章
站长推荐