C语言switch语句
核心作用:处理多分支选择,比多重if-else
更简洁清晰
🌟 一、switch语句基础格式
switch(整型表达式) { // ★ 表达式必须是整数(int/char)或枚举 case 整型常量1: 语句1; break; // 可选 case 整型常量2: 语句2; break; ... default: // 可选 默认语句; }
🔍 二、执行规则
-
计算表达式 → 得到一个整数值
-
从上到下匹配case → 找到匹配的常量
-
执行对应语句 → 直到遇到
break
或switch
结束 -
无匹配case → 执行
default
(如果有,如果没有default 则什么都不执行)
💡 三、完整案例:成绩评级
#include <stdio.h> int main() { char grade = 'B'; switch(grade) { // 表达式是char类型(属于整型) case 'A': printf("优秀\n"); break; // 跳出switch case 'B': printf("良好\n"); // ✔️ 匹配成功,执行此句 break; case 'C': printf("及格\n"); break; default: // 所有case都不匹配时执行 printf("无效成绩\n"); } return 0; } // 输出:良好
⚠️ 四、break的重要性
1. 带break → 执行完当前case后退出switch
int num = 2; switch(num) { case 1: printf("A"); case 2: printf("B"); // 输出B break; // 立即退出switch case 3: printf("C"); } // 最终输出:B
2. 不带break → 继续执行后续case(穿透现象)
int num = 2; switch(num) { case 1: printf("A"); case 2: printf("B"); // 输出B case 3: printf("C"); // 继续执行,输出C default: printf("D"); // 继续执行,输出D } // 最终输出:BCD(严重逻辑错误!)
🔑 五、关键规则总结
要素 | 要求 | 常见错误 |
---|---|---|
表达式 | 必须是整型(int/char/enum) | switch(3.14) ❌ 浮点数不行 |
case值 | 必须是整型常量(不能是变量) | case n: ❌(n是变量) |
break | 建议每个case后都加 | 漏写导致穿透 |
default | 可放在任意位置(习惯放最后) | 未处理意外情况 |
💼 六、职业习惯养成
-
永远写default → 处理意外情况
switch(day) { case 1: ... break; ... default: printf("无效日期\n"); // 防御性编程 }
-
case合并技巧 → 多个case共享代码
switch(month) { case 1: case 3: case 5: // 1,3,5月都是31天 printf("31天"); break; case 2: printf("28/29天"); break; }
🚀 七、switch vs if-else对比
场景 | switch优势 | if-else优势 |
---|---|---|
多固定值判断 | 代码简洁,执行效率高 | 无法处理范围判断(如x>10) |
范围判断 | 不支持(需用if) | 直接支持(如x>10 && x<20) |
📝 总结口诀:
-
switch只认整数,case常量不能变
-
每个case加break,default保安全
-
穿透效果要警惕,合并case更简洁