【19】C语言多向分支Switch case语法详解
【19】C语言多向分支Switch case语法详解
 
文章目录
- 1.基本语法结构
- 2.完整代码示例
- 3.重要技巧
- 3.1 case穿透(Fall-through)
- 3.2 default子句
- 3.3 嵌套switch语句
- 3.4 枚举类型与switch结合
 
- 4. switch vs if-else 选择建议
Switch语句是C语言中用于实现多向分支选择的结构,比多个if-else语句更简洁、高效。
1.基本语法结构
switch (表达式) {case 常量表达式1:语句序列1;break;case 常量表达式2:语句序列2;break;// 更多case...default:默认语句序列;break;
}
- switch表达式
- 必须是整型表达式(int, char, enum等)
- 不能是浮点型、字符串或其他复杂类型
- case标签
- 必须是常量表达式,不能是变量
- 值必须唯一,不能重复
- 可以是字符常量(自动转换为ASCII码)
- break语句
- 用于退出整个switch结构
- 如果省略break,会继续执行下一个case("穿透"现象)
2.完整代码示例
示例1:基础用法
#include <stdio.h>int main() {int day = 3;switch (day) {case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 7:printf("星期日\n");break;default:printf("无效的天数\n");break;}return 0;
}
示例2:字符类型switch
#include <stdio.h>int main() {char grade = 'B';switch (grade) {case 'A':printf("优秀!\n");break;case 'B':printf("良好\n");break;case 'C':printf("及格\n");break;case 'D':printf("不及格\n");break;default:printf("无效等级\n");break;}return 0;
}
3.重要技巧
3.1 case穿透(Fall-through)
故意省略break,让多个case共享同一段代码:
#include <stdio.h>int main() {int month = 2;int days = 0;switch (month) {case 1: case 3: case 5: case 7: case 8: case 10: case 12:days = 31;break;case 4: case 6: case 9: case 11:days = 30;break;case 2:days = 28; // 简化的二月天数break;default:days = -1; // 错误break;}printf("%d月有%d天\n", month, days);return 0;
}
3.2 default子句
- 可选的,但建议总是包含
- 处理所有未匹配的情况
- 可以放在任意位置,但通常放在最后
3.3 嵌套switch语句
#include <stdio.h>int main() {int category = 1;int subcategory = 2;switch (category) {case 1:printf("主分类1: ");switch (subcategory) {case 1:printf("子分类1.1\n");break;case 2:printf("子分类1.2\n");break;default:printf("未知子分类\n");break;}break;case 2:printf("主分类2\n");break;default:printf("未知主分类\n");break;}return 0;
}
3.4 枚举类型与switch结合
#include <stdio.h>enum Color {RED, GREEN, BLUE};int main() {enum Color c = GREEN;switch (c) {case RED:printf("红色\n");break;case GREEN:printf("绿色\n");break;case BLUE:printf("蓝色\n");break;}return 0;
}
4. switch vs if-else 选择建议
使用switch的情况:
- 基于单个整型表达式的多向分支
- case值已知且离散
- 需要高效的多路分支
使用if-else的情况:
- 条件涉及范围比较(x > 10)
- 条件基于多个变量
- 条件不是整型表达式
