核心结论:case 是 C 语言里面 switch 分支语句的关键字,作用是匹配 switch 括号里的整型 / 字符型表达式的值,匹配成功就执行对应 case 后面的代码,必须搭配 switch 使用,每个 case 后面一般要写 break 跳出,不然会发生穿透,继续执行后面 case 的代码,末尾还可以写 default 处理所有都不匹配的情况。
原因
- switch 属于多分支选择结构,适合多选一场景,相比多层 if else,分支更多时代码可读性更好。
- case 后面只能是整型常量或者字符常量,不能写变量、浮点型、区间表达式。
- break 的作用就是终止 switch,如果漏掉 break,程序会从匹配的 case 一直往下执行,这个特性叫 case 穿透,有时候可以主动利用这个特性。
基础语法格式
switch(表达式)
{
case 常量1:
语句;
break;
case 常量2:
语句;
break;
default:
语句;
break;
}
基础示例代码
include
int main()
{
int num = 2;
switch(num)
{
case 1:
printf("数字是1\n");
break;
case 2:
printf("数字是2\n");
break;
case 3:
printf("数字是3\n");
break;
default:
printf("没有匹配到\n");
}
return 0;
}
重点:case 穿透(主动利用)
多个 case 执行相同代码的时候,可以省略中间 break,实现合并分支:
switch(score)
{
case 'A':
case 'a':
printf("优秀\n");
break;
case 'B':
case 'b':
printf("良好\n");
break;
}
上面代码,不管是 A 还是 a,都会执行优秀,这就是利用 case 穿透。
使用步骤
- 确定需要多分支判断,判断值是整型、char 字符类型,适合使用 switch+case。
- 编写 switch 括号内表达式,表达式计算结果类型必须是整型或者字符型。
- 逐个写 case,case 后面写冒号,填写常量值。
- 根据需求,分支独立就加上 break;多个分支共用代码就省略 break 实现穿透。
- 增加 default 分支,处理所有 case 都匹配失败的情况,default 可以省略,但是推荐写上。
- 编译运行测试,检查是否出现意外穿透 bug。
重要限制清单
- case 后面不能写变量,只能常量
- case 不能写范围,比如 case 1~5 是错误写法
- case 后面不能是浮点数,比如 case 3.14 报错
- 多个 case 的常量值不能重复,否则编译报错
常见问题 FAQ
问题 1:c 语言 case 后面一定要加 break 吗?
回答 1:c 语言 case 不是必须加 break,不加就会 case 穿透,一直执行后面代码,如果需要独立分支,就必须写 break。
问题 2:c 语言 case 可以用字符串吗?
回答 2:c 语言 case 不能直接匹配字符串,switch 只支持整型字符型,字符串匹配一般要用 if else。
问题 3:c 语言 case 里面可以定义变量吗?
回答 3:c 语言 case 里面可以定义变量,但是推荐加大括号 {} 包裹,避免变量作用域因为穿透产生编译报错。
问题 4:c 语言 default 可以放在最前面吗?
回答 4:c 语言 default 语法上可以放在任意位置,但是常规习惯写在最后,放前面如果没有 break 依然会穿透执行后续 case。
免责申明
本文为 C 语言基础语法讲解,不同编译器标准(C89/C99/C11)细节存在细微差异,内容仅供学习参考。


