C语言中default的关键作用是什么?

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

defaultswitch 语句的一部分,它的作用是提供一个“默认”或“其他所有情况”的执行分支。

c语言default是什么意思
(图片来源网络,侵删)

核心概念:switch 语句的“收尾工作”

default 关键字必须用在 switch 语句中。switch 语句允许一个变量根据其值与多个 case 标签进行比较,并执行匹配的代码块。

default 的作用就是:switch 中表达式的值与任何一个 case 标签的值都不匹配,那么程序就会执行 default 标签下的代码块。

你可以把它想象成一个 if-else if-else 结构中的最后的 else

// if-else if-else 结构
if (条件1) {
    // ...
} else if (条件2) {
    // ...
} else { // 这里的 else 就相当于 switch 中的 default
    // ...
}

语法结构

default 的语法非常简单,它通常放在 switch 语句的末尾,但也可以放在任何位置(不过放在末尾最符合逻辑和可读性)。

switch (expression) {
    case constant1:
        // 当 expression 的值等于 constant1 时,执行这里的代码
        break;
    case constant2:
        // 当 expression 的值等于 constant2 时,执行这里的代码
        break;
    // ... 可以有更多的 case
    default:
        // 当 expression 的值不等于任何一个 case 时,执行这里的代码
        break;
}

注意:

  • default 是可选的,一个 switch 语句可以没有 default
  • 每个 casedefault 后面的代码块通常以 break; 以防止“贯穿”(fall-through)到下一个 casedefault,我们稍后会详细解释这个概念。

代码示例

让我们通过几个例子来理解 default 的用法。

示例1:基本用法(提供默认操作)

假设我们要根据一个学生的分数(0-100)给出评级,但如果分数不在0-100范围内,则提示输入错误。

#include <stdio.h>
int main() {
    int score = 85;
    printf("请输入学生的分数 (0-100): ");
    scanf("%d", &score);
    switch (score) {
        case 90 ... 100: // C99标准支持的范围写法,或者用多个 case
            printf("评级: A\n");
            break;
        case 80 ... 89:
            printf("评级: B\n");
            break;
        case 60 ... 79:
            printf("评级: C\n");
            break;
        case 0 ... 59:
            printf("评级: D\n");
            break;
        default: // score 不在 0-100 之间
            printf("错误:分数无效!请输入0到100之间的数字,\n");
            break;
    }
    return 0;
}

分析:

  • 如果用户输入 85score 的值是 85,它匹配 case 80 ... 89,打印 "评级: B"。
  • 如果用户输入 95,匹配 case 90 ... 100,打印 "评级: A"。
  • 如果用户输入 -5150score 的值不匹配任何一个 case,程序就会跳转到 default 分支,打印 "错误:分数无效!..."。

示例2:default 的位置(不一定要在最后)

虽然 default 通常放在最后,但它可以放在任何位置,这会影响代码的执行逻辑,可能会降低可读性。

#include <stdio.h>
int main() {
    int value = 5;
    switch (value) {
        default:
            printf("这是默认分支,因为值不匹配任何 case,\n");
            break;
        case 1:
            printf("值是 1\n");
            break;
        case 2:
            printf("值是 2\n");
            break;
    }
    return 0;
}

分析:

  • value5
  • 程序从上到下检查 case,发现 5 不等于 1,也不等于 2
  • 它跳到 default 分支并执行其中的代码。
  • 输出结果为:这是默认分支,因为值不匹配任何 case。

这个例子说明,default 的执行不依赖于它在代码中的物理位置,而是依赖于逻辑上的“不匹配”。


重要概念:break 和 “贯穿” (Fall-Through)

这是理解 switch 语句最关键的一点。

  • break;:当执行到 break; 时,程序会立即跳出整个 switch 语句,继续执行 switch 之后的代码。
  • “贯穿” (Fall-Through):如果某个 casedefault 分支的末尾没有 break;,程序会“掉下去”,继续执行下一个 casedefault 分支的代码,直到遇到一个 break; 或者 switch 语句结束。

示例3:利用“贯穿”特性

假设我们要统计一个元音字母(a, e, i, o, u),我们可以利用 fall-through 来简化代码。

#include <stdio.h>
int main() {
    char ch = 'e';
    switch (ch) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            printf("%c 是一个元音字母,\n", ch);
            break; // 这个 break 会终止所有元音字母的匹配
        default:
            printf("%c 是一个辅音字母或其它字符,\n", ch);
            break;
    }
    return 0;
}

分析:

  1. ch 的值是 'e'
  2. 程序检查 case 'a',不匹配。
  3. 继续检查 case 'e'匹配
  4. 由于 case 'e' 后面没有 break;,程序会“贯穿”到下一个 case,即 case 'i'
  5. case 'i' 也没有 break;,继续贯穿到 case 'o'
  6. case 'o' 也没有 break;,继续贯穿到 case 'u'
  7. case 'u' 后面有 break;,程序终于跳出 switch 语句。
  8. 最终打印:e 是一个元音字母。

这种写法非常简洁,避免了重复的 printf 语句。


特性 描述
作用 作为 switch 语句的一部分,处理所有不匹配任何 case 的情况。
位置 可以放在 switch 语句内的任何位置,但通常放在末尾以提高可读性。
可选性 default 分支是可选的,如果没有 default,且没有 case 匹配,则 switch 语句不执行任何操作。
break 的关系 default 分支的末尾通常需要 break; 来防止代码“贯穿”到后续的 casedefault 不在末尾)。
高级用法 可以故意省略 default 或某个 casebreak; 来利用“贯穿”特性,实现更复杂的逻辑,如示例3。

default 是C语言中 switch 语句一个非常有用的组成部分,它让程序能够处理那些“意料之外”或“未明确指定”的输入情况,使代码更加健壮和完整。

-- 展开阅读全文 --
头像
织梦数据库安装视频新手如何避坑?
« 上一篇 01-09
织梦手机站与PC站如何实现数据同步?
下一篇 » 01-09
取消
微信二维码
支付宝二维码

目录[+]