C 语言中 switch case 是多分支选择语句,用来根据一个整型表达式的值,匹配对应的 case 分支执行代码,适合分支数量比较多、判断条件是等值匹配的场景,相比连续多个 if else,结构更清晰可读性更好。switch 括号里面的表达式结果必须是整型、字符型或者枚举类型,不能是浮点型 double float,也不能是字符串,case 后面必须跟常量表达式,不能写变量。程序执行的时候,会计算 switch 表达式的值,从上往下找到相等的 case 标号,从这个位置开始顺序执行后面所有代码,直到遇到 break 才跳出 switch,如果漏掉 break,就会发生穿透,继续执行下一个 case 里面的代码,default 分支代表所有 case 都匹配失败的时候执行,它可以写在任意位置,一般习惯放在最后。
一 基础语法结构
switch (表达式)
{
case 常量 1:
语句;
break;
case 常量 2:
语句;
break;
default:
语句;
break;
}
执行逻辑说明
第一步 计算 switch 括号内表达式的值
第二步 依次和每个 case 后面的常量做等值对比
第三步 匹配成功,进入该 case 开始执行代码
第四步 遇到 break,立刻跳出整个 switch 结构
第五步 全部 case 都不匹配,执行 default 里面代码
二 关键规则对照表
| 项目 | 规则要求 |
|---|---|
| switch 表达式类型 | 整型 char 枚举,禁止浮点 字符串 |
| case 后面内容 | 常量表达式,不能是变量 |
| case 常量值 | 同一个 switch 里面不能重复 |
| break 作用 | 终止当前分支,跳出 switch |
| default | 可选,所有分支都不匹配才执行 |
三 break 穿透深度讲解
穿透是 switch 非常核心的特点,很多初学者忘记写 break,导致代码意外继续向下执行。
比如匹配 case 1 之后没有 break,代码会继续执行 case 2、case3 里面的语句,直到碰到 break 或者 switch 结束。
穿透也可以主动利用,多个 case 共用同一段处理代码,比如 case 1 case 2 case3 共用同一组语句,这种写法是合理用法,不是错误。
四 深度要点
第一 case 后面的常量在编译阶段就确定,运行时不能动态修改,所以 switch 不能做区间判断,比如不能写 case 1~10,如果要判断范围,还是要用 if else。
第二 字符型可以作为 switch 表达式,因为 char 本质是整数编码,case 后面可以写字符常量,比如 case 'A'。
第三 default 不是必须写,如果不需要处理其他情况,可以省略 default。
第四 switch 只能等值匹配,这是它和 if else 最大区别,if else 可以写大于小于这类比较判断。
第五 嵌套 switch,switch 内部还可以再写 switch,但是嵌套层数太多会降低可读性,工程里面尽量避免深层嵌套。
五 常见误区
误区一 switch 可以判断字符串,错误,字符串不能作为 switch 表达式。
误区二 每个 case 必须写 break,错误,主动穿透场景可以省略 break。
误区三 default 必须放在最后,错误,default 可以写在最前面或者中间,只是习惯放末尾。
误区四 case 后面可以写变量,错误,case 必须是编译期常量。
【常见问题】
问题 1 C 语言中 switch case 用法 为什么不能用 double 作为 switch 表达式
回答 1 C 语言中 switch case 用法规定 switch 表达式必须是整型相关类型,double 是浮点数,存在精度误差,等值匹配不可靠,所以语法上不允许把 double 放在 switch 括号里面。
问题 2 C 语言中 switch case 用法 忘记写 break 会出现什么现象
回答 2 C 语言中 switch case 用法里面如果 case 分支缺少 break,会发生穿透,匹配成功之后继续顺序执行后面所有 case 代码,直到遇到 break 或者 switch 结束,这是初学高频错误。
问题 3 C 语言中 switch case 用法 能不能实现数字区间判断
回答 3 C 语言中 switch case 用法只支持等值匹配,不能直接写区间条件,如果需要判断一个数字落在某个范围,应该改用 if else 分支语句。
问题 4 C 语言中 switch case 用法 default 分支是必须写的吗
回答 4 C 语言中 switch case 用法里面 default 属于可选分支,所有 case 都匹配失败的时候才执行 default,如果业务不需要处理其他情况,可以直接省略 default。
【免责申明】
本文是 C 语言中 switch case 用法相关基础语法讲解,不同 C 标准对枚举、嵌套 switch 编译规则基本一致,代码行为受编译优化影响很小,示例仅用于学习演示,复杂业务分支请结合需求判断是否适合使用 switch,程序逻辑错误由开发者自行排查处理。


