switch default c语言

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

defaultswitch 语句中的一个可选但非常重要的部分,它定义了当 switch 表达式的值与任何一个 case 标签的值都不匹配时,程序应该执行的代码块。

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

default 的核心作用

default 的作用类似于 if-else if 结构中的最后的 else

  • if-else if 结构:

    if (条件1) {
        // ...
    } else if (条件2) {
        // ...
    } else {
        // 当以上所有条件都不为真时,执行这里的代码
    }
  • switch 结构:

    switch (表达式) {
        case 值1:
            // ...
            break;
        case 值2:
            // ...
            break;
        default: // 等价于上面的 else
            // 当表达式的值不等于 值1, 值2... 时,执行这里的代码
            break;
    }

default 提供了一个“兜底”方案,处理所有未被 case 明确覆盖的情况。

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

default 的语法和位置

  1. 关键字default
  2. 它后面必须跟一个冒号 。
  3. 代码块:冒号后面可以跟一个或多个语句,形成一个代码块,这个代码块以 break; 以防止“贯穿”(fall-through)到下一个 case
  4. 位置default 可以放在 switch 语句中的任何位置,但通常为了代码清晰和可读性,我们习惯将它放在所有 case 分支的最后

示例:

#include <stdio.h>
int main() {
    int grade = 85;
    switch (grade) {
        case 90:
            printf("优秀\n");
            break;
        case 80:
            printf("良好\n");
            break;
        case 60:
            printf("及格\n");
            break;
        default: // 放在最后,处理 60 分以下的所有情况
            printf("不及格\n");
            break;
    }
    return 0;
}
// 输出: 良好

default 的执行时机

default 分支仅在以下情况下被执行:

  • switch 表达式的计算结果与 switch 语句中任何一个 case 的值都不相等

重要提示default 分支被省略,并且表达式的值与所有 case 都不匹配,switch 语句将不执行任何操作,程序会继续执行 switch 语句后面的代码。

示例(省略 default):

switch default c语言
(图片来源网络,侵删)
#include <stdio.h>
int main() {
    int number = 5;
    switch (number) {
        case 1:
            printf("数字是 1\n");
            break;
        case 2:
            printf("数字是 2\n");
            break;
        // 没有 default 分支
    }
    printf("switch 语句执行完毕,\n"); // 这行代码总会被执行
    return 0;
}
// 输出:
// switch 语句执行完毕。

在上面的例子中,number 的值是 5,没有匹配的 case,也没有 defaultswitch 内部没有任何输出,程序直接跳到 printf("switch 语句执行完毕,\n");


default 的最佳实践和注意事项

a. 始终考虑使用 default

这是一个非常好的编程习惯,即使你认为当前所有可能的情况都已经被 case 覆盖,也应该加上一个 default 分支,这样做的好处是:

  1. 代码健壮性:当程序逻辑发生变化,或者输入数据超出预期范围时,default 可以防止程序出现未定义行为或静默失败,你可以在 default 中打印一条警告信息或执行一个安全的默认操作。
  2. 代码可读性:它向其他阅读代码的人明确表示:“我已经考虑了所有可能性,这个 default 是为了处理那些意料之外的情况。”

推荐写法:

// 好的实践
switch (option) {
    case 'A':
        // ...
        break;
    case 'B':
        // ...
        break;
    default:
        printf("警告:收到未知选项 '%c'\n", option);
        break;
}

b. default 和 “贯穿”(Fall-through)

defaultcase 一样,如果后面没有 break; 语句,程序会继续执行下一个分支的代码,这被称为“贯穿”。

示例(default 贯穿):

#include <stdio.h>
int main() {
    int value = 3;
    switch (value) {
        case 1:
            printf("Case 1\n");
            break;
        case 2:
            printf("Case 2\n");
            break;
        case 3:
            printf("Case 3\n");
            // 没有 break
        default: // 当 value 是 3 时,会执行到这里
            printf("Default (因为 Case 3 没有break)\n");
            break;
    }
    return 0;
}
// 输出:
// Case 3
// Default (因为 Case 3 没有break)

在这个例子中,当 value 是 3 时,程序会进入 case 3,打印 "Case 3",因为没有 break,所以它会继续向下执行 default 分支。

c. default 可以没有 break

defaultswitch 语句的最后一个分支,那么它的 break; 语句实际上是可选的,因为即使没有它,程序执行完 default 的代码后也会自动退出 switch 语句。

为了保持代码风格的一致性和清晰性,强烈建议在 default 后面也加上 break;,这可以避免在后续添加新的 case 分支时,因为忘记加 break 而导致意外的“贯穿”错误。

示例(default 没有 break,但位于末尾):

switch (x) {
    case 10:
        // ...
        break;
    default: // 位于最后,break 可以省略,但不推荐
        printf("处理其他情况\n");
        // break; // 省略这里也可以,但加上更安全
}

特性 描述
作用 switch 的“兜底”分支,处理所有 case 未匹配的情况。
语法 default: 后跟代码块。
位置 可以放在 switch 内的任何位置,但通常放在最后。
执行条件 仅当 switch 表达式的值与所有 case 都不匹配时执行。
break 的关系 case 一样,如果没有 break,会发生“贯穿”。
最佳实践 强烈建议始终包含 default 分支,即使它只打印一条警告信息,以提高代码的健壮性和可读性,为了保持一致性,建议在 default 后也加上 break;

掌握 default 的正确使用,是写出清晰、健壮、可维护的 C 代码的重要一环。

-- 展开阅读全文 --
头像
dede global.cfg tel是什么?配置还是变量?
« 上一篇 12-06
织梦dedecms列表list如何实现隔行变色?
下一篇 » 12-06

相关文章

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

目录[+]