Switch else在C语言中怎么用?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 C语言 正文

核心要点

在 C 语言中,switch 语句本身没有直接的 else 关键字。switch 语句使用 casedefault 来处理不同的分支,而 default 在功能上类似于 if-else 结构中的 else

switch else c语言
(图片来源网络,侵删)

switch 语句的基本结构

switch 语句是一个多路分支控制结构,它根据一个表达式的值,来执行多个代码块中的一个。

switch (expression) {
    case constant1:
        // 当 expression 的值等于 constant1 时,执行这里的代码
        break;
    case constant2:
        // 当 expression 的值等于 constant2 时,执行这里的代码
        break;
    case constant3:
        // 当 expression 的值等于 constant3 时,执行这里的代码
        break;
    default:
        // 当 expression 的值不等于任何一个 case 时,执行这里的代码
        break; // default 的 break 是可选的,但推荐加上
}

关键规则:

  1. switch 表达式: 里的表达式必须是整型int, char, long 等)或枚举类型。
  2. case 常量:每个 case 后面必须跟一个常量表达式(不能是变量),并且所有 case 的值必须是唯一的。
  3. break 语句:这是 switch 中最关键也最容易出错的部分。break 的作用是跳出整个 switch 语句,如果某个 case 后面没有 break,程序会继续执行下一个 case 的代码,这被称为 "case 穿透" (fall-through)
  4. default 分支default 是可选的。switch 表达式的值与所有 case 都不匹配,程序就会执行 default 分支的代码,它的作用就相当于 if-else 里的 else

defaultswitch 的 "else"

default 分支是 switch 语句的“默认”或“其他情况”处理分支,它在功能上完全等同于 if-else if-else 结构中的 else

if-else 版本:

if (grade == 'A') {
    printf("优秀\n");
} else if (grade == 'B') {
    printf("良好\n");
} else if (grade == 'C') {
    printf("及格\n");
} else { // 这里的 else 就相当于 switch 里的 default
    printf("不及格\n");
}

switch 版本:

switch else c语言
(图片来源网络,侵删)
switch (grade) {
    case 'A':
        printf("优秀\n");
        break;
    case 'B':
        printf("良好\n");
        break;
    case 'C':
        printf("及格\n");
        break;
    default: // 这里的 default 就相当于 if-else 里的 else
        printf("不及格\n");
        break;
}

"Case 穿透" (Fall-through) 及其应用

这是 switch 一个非常独特的特性,当你省略 break 时,代码会“穿透”到下一个 case

示例 1:意外的穿透(常见错误) 假设我们想根据分数段给出评语,但忘记写 break

int score = 85;
switch (score / 10) { // score / 10 得到 8
    case 10:
    case 9:
        printf("优秀\n"); // 执行
    case 8:
        printf("良好\n"); // 因为上面没有 break,所以也执行了
    case 7:
        printf("中等\n"); // 同样也执行了
    default:
        printf("及格\n"); // 最后也执行了
        break;
}
// 输出结果:
// 优秀
// 良好
// 中等
// 及格

这显然不是我们想要的结果,忘记 break 是一个非常常见的错误。

示例 2:利用穿透(巧妙用法) 我们可以故意利用穿透来简化代码,给 90 分以上和 80-89 分都算“优秀”。

int score = 95;
switch (score / 10) {
    case 10:
    case 9:
        printf("优秀\n"); // 当 score/10 是 10 或 9 时,都会执行到这里
        break;
    case 8:
        printf("良好\n");
        break;
    default:
        printf("及格\n");
        break;
}
// 输出结果:
// 优秀

在这个例子中,case 10:case 9: 共享了同一段代码,非常优雅。


switch vs. if-else if-else

特性 switch 语句 if-else if-else 语句
判断条件 只能判断离散值(常量) 可以判断任何条件(范围、表达式、变量等)
数据类型 通常是整型或枚举类型 任何数据类型(整数、浮点数、字符、指针等)
可读性 当有多个离散值的分支时,代码更清晰、结构化 当条件复杂或涉及范围判断时,更灵活、更清晰
"else" 使用 default 使用 else

选择建议:

  • 当你需要根据一个变量的具体值int, char)来执行不同的操作时,优先使用 switch,它通常比一长串的 if-else if 更易读。
  • 当你需要判断范围(如 if (x > 10 && x < 20))或复杂的逻辑表达式时,必须使用 if-else if-else

  1. switch 没有 else:C 语言的 switch 语句使用 default 来处理所有未被 case 匹配的情况。
  2. default 的作用default 分支在功能上等同于 if-else 结构中的 else,是“其他所有情况”的默认处理分支。
  3. break 至关重要:记得在每个 case 代码块的末尾加上 break,除非你确实需要“case 穿透”的特性。
  4. switchif-else 的选择:根据判断条件的性质(离散值 vs. 范围/复杂逻辑)来选择更合适的结构。
-- 展开阅读全文 --
头像
C语言HelloWorld运行为何第一步要写include ?
« 上一篇 2025-12-29
windowsapi编程c语言
下一篇 » 2025-12-29

相关文章

取消
微信二维码
支付宝二维码

目录[+]