c 语言中 switch 的用法 多分支等值选择语句详解
核心结论就是 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 相关语法警告优化细节存在细微差异,实际项目开发请参考编译器官方文档,本文不对按照本文代码运行产生的逻辑错误编译报错等问题承担相关责任。
相关阅读
-
产科男医生是一部都市医疗题材电视剧,故事以医院产科作为核心场景,围绕产科男医生群体的职业日常,医患矛盾...浏览全文>>
-
decreased 是动词 decrease 的过去式和过去分词,同时也可以当作形容词使用,核心含义是下降的减少的降低的...浏览全文>>
-
有一名车主把车子停在了消防通道,结果车身被人贴满一共 55 张禁停贴纸,看到车子这副模样之后,这名男子觉...浏览全文>>
-
不少还在观望、打算等手机降价的等等党现在很难等到低价机型,多家手机厂商已经开启囤货、锁定上游产能的操作...浏览全文>>
-
澳大利亚非营利消费者组织 Choice 公布 2026 年度 Shonky Award(黑心奖),索尼互动娱乐 SIE 也就是 PlayStation 品牌上榜,这 浏览全文>>
-
B 站大会员加上京东 PLUS 的联合双年卡现在打出 148 元的价格,这个价位属于今年的低价档位,对比日常售...浏览全文>>
-
奇瑞这款全新方盒子车型捷途自由者 7 正式上市,起步价只要 8 99 万,把硬派方盒子的门槛压到了很低的位...浏览全文>>
-
尼古拉斯・凯奇这次再度出山,不是只拍一部小成本片子,而是同时布局院线电影、流媒体剧集两条赛道,不少都是...浏览全文>>
-
一名独立开发者从零手写渲染引擎,在普通 RTX 3080 显卡、2K 分辨率下做到 130 帧,场景里面同时实时渲...浏览全文>>
-
国内多个省份陆续发文推进落实带薪休假制度,目标就是解决很多职工一直存在的带薪休假不能休、不敢休的现实难...浏览全文>>
- 等等党要失望手机厂商囤货锁产能,新机售价或将上调
- 年内新低 B 站大会员搭配京东 PLUS 双年卡到手 148 元
- 罗永浩提醒徕芬创始人叶洪新,遭遇抹黑一定要出击,不然会吃亏
- 华晨宝马裁员 N+5 补偿方案冲上热搜,沈阳三座生产工厂受到波及,入职 15 年老员工也在调整范围
- OPPO Reno17 官宣 11 月 9 日发布 首发 6 秒全焦段 4K 超清实况
- 上海飞曼谷客机风挡破裂返航,旅客统一安排酒店住宿
- 网传《虐杀原形》有望重启,爆料称初代重制项目正在开发
- 租车后转借给无驾照人员引发交通事故 法院公布赔偿责任判决结果
- 苹果披露自身业务存在多项风险,警报信号显现
- NVIDIA Omniverse 对话达索、西门子、VisComp,研讨数字孪生与工业 AI 落地
- 产科男医生剧情分析介绍 都市医疗剧解读
- 8.99 万起 捷途自由者 7 上市,奇瑞全新方盒子 SUV 来了
- 现实版楚门的世界演员被骗拍戏,历时四月才察觉骗局
- 性淋巴肉芽肿 性病沙眼衣原体感染病症
- 国产 RNA 生物大模型开源,成果登上《自然》国际顶刊
- 战神劳菲延期到 2027 年 5 月 20 日发售,圣莫尼卡工作室表示专注打磨品质
- 协作智能基准论文正式发布,18 个 AI 模型完成 240 项任务对照测试
- PyTorch Day Japan 2026 设置议题,聚焦 ExecuTorch 机器人端侧推理方案
- 史上最大加密货币盗窃案曝光,黑客 20 分钟盗取币安 63 亿美元,引发平台是否该担责的讨论
- Google 面向 AI Pro 与 Ultra 个人订阅用户上线 Antigravity Remote Agents
- decreased 怎么用 过去式过去分词用法讲解
- 索尼 PS 拿到澳洲 Choice 的年度黑心奖,争议点为停发实体光盘与数字游戏版权规则
- 比亚迪刘学亮回应澳洲官员言论,针对 “中国车跑一跑门掉了” 说法作出表态
- 怎么查询医保定点医院 查询渠道和操作步骤
- LeCun 转发 ID-WM 分层世界模型,该模型支持数千步长规划
- AMD Q4 营收有望首次反超 Intel,苏姿丰打破长期落后局面
- Apple 智能国行上线带动苹果股价大涨,英伟达 GPU 供给紧缺,字节限制员工个人 AI 使用
- 比亚迪刘学亮复盘索尼专利纠纷早年在日本连合适律师都很难找到
- 我国 AIMS 望远镜取得重大突破 首次观测到太阳耀斑发生时的磁场变化
- 澎湃 OS 4 开启全球推送,小米、REDMI、POCO 数十款机型纳入更新名单
- 起售价 3499 元的红米 K100,有望成为本年度性能新机守门员,但存在明显短板
- 蓝牙技术联盟正式采纳 HDT 标准,低功耗传输峰值速度提升 275%
- 个体能熟练用好 AI,落地到企业层面却很难见效的深层原因
- OpenAI 计划收购 Pierre 助力 Codex 团队协作平台加快建设
- Grok Bot 上线新能力,支持代用户拨打电话
- 微软 Ignite 大会增设 Pre-Day 专场,将推出 Agent Platform 实操实验
- ishikilabs 发布机器人高保真仿真平台 Fern,项目获得 Y Combinator 扶持
- Floot 上线支付与物流功能,支持通过 AI 指令完成配置
- StanfordAILab 发布 Ripple-65B Preview,在 Terminal-Bench 2.1 拿下开源权重新 SOTA
- Gemini API Computer Use 工具正式开放可用
