当前位置: 首页 > news >正文

C语言switch语句

核心作用:处理多分支选择,比多重if-else更简洁清晰


🌟 一、switch语句基础格式

switch(整型表达式) {   // ★ 表达式必须是整数(int/char)或枚举
    case 整型常量1: 
        语句1;
        break;  // 可选
    case 整型常量2: 
        语句2;
        break;
    ...
    default:     // 可选
        默认语句;
}

🔍 二、执行规则

  1. 计算表达式 → 得到一个整数值

  2. 从上到下匹配case → 找到匹配的常量

  3. 执行对应语句 → 直到遇到breakswitch结束

  4. 无匹配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可放在任意位置(习惯放最后)未处理意外情况

💼 六、职业习惯养成

  1. 永远写default → 处理意外情况

switch(day) {
    case 1: ... break;
    ...
    default: printf("无效日期\n");  // 防御性编程
}
  1. 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更简洁

相关文章:

  • OpenGL多纹理处理
  • 本地文生图使用插件(Stable Diffusion)
  • 【JavaWeb学校Day29】
  • 【QT5 多线程示例】信号量
  • Java面试黄金宝典13
  • 有价值的面试问题
  • MTK平台 Android12-Android13 默认搜狗输入法
  • 借壹起航东风,中国工厂出海开启新征程
  • C语言的总结分享
  • 深度解析「前缀和」与「差分法」:高效算法的基石
  • B站左神算法课学习笔记(P7):图
  • 自然数k次方的前n项和通项公式
  • 23种设计模式-解释器(Interpreter)设计模式
  • html5炫酷3D数字时钟项目开发实践
  • systemd-networkd的配置文件的优先级 笔记250325
  • 【MySQL】MySQL B+树的查询数据过程是怎样的?
  • 【数据可视化艺术·进阶篇】热力图探秘:用色彩演绎场馆和景区的人流奥秘
  • 【读论文】——基于高光谱成像技术测定玉米籽粒硬度
  • 基于 arco 的 React 和 Vue 设计系统
  • 3.0 Disruptor的使用介绍(一)