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

(图片来源网络,侵删)
核心概念:default 的作用
在一个 switch 语句中,程序会计算一个表达式的值,然后与 case 标签后面的值进行匹配,如果找到了匹配的 case,程序就执行该 case 后面的代码。
如果表达式的值没有匹配任何一个 case 标签,那么程序该怎么办呢?这时,default 就派上用场了。
default 块包含了在所有 case 都不匹配时需要执行的代码,你可以把它理解为 switch 语句的“最后防线”或“其他情况处理”。
语法结构
default 必须和 switch 语句一起使用,其基本语法如下:

(图片来源网络,侵删)
switch (expression) {
case constant1:
// 当 expression 的值等于 constant1 时,执行这里的代码
break;
case constant2:
// 当 expression 的值等于 constant2 时,执行这里的代码
break;
// ... 可以有更多的 case ...
default:
// 当 expression 的值不等于任何一个 case 时,执行这里的代码
break; // 虽然 default 是最后一个,但加上 break 是个好习惯
}
关键点:
default是一个可选的(optional)部分,switch语句可以没有default。default块的位置是灵活的,可以放在switch语句的任何地方,但通常为了代码清晰,会放在所有case的最后。- 当
default被执行时,程序会跳转到default:标签,然后顺序执行其后的代码,直到遇到break语句或者switch语句的结束大括号 。
工作流程图
+-----------------+
| 计算 expression |
+--------+--------+
|
+--------+--------+
| 开始匹配 case |
+--------+--------+
|
+--------+--------+
| case 1 匹配? |---- 是 ---> 执行 case 1 的代码 ---> break; (退出switch)
+--------+--------+
| 否
+--------+--------+
| case 2 匹配? |---- 是 ---> 执行 case 2 的代码 ---> break; (退出switch)
+--------+--------+
| 否
+--------+--------+
| ... (更多case) |
+--------+--------+
| 否
+--------+--------+
| 有 default? |
+--------+--------+
| 有
+--------+--------+
| 执行 default 的代码 |
+--------+--------+
| 没有
+--------+--------+
| 结束 switch |
+-----------------+
代码示例
让我们通过几个例子来理解 default 的用法。
示例 1:处理无效输入
这是一个非常经典的场景,根据用户输入的数字给出不同的反馈,如果输入的不是预期的数字,则提示错误。
#include <stdio.h>
int main() {
int choice;
printf("请选择一个选项 (1, 2, 或 3): ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("你选择了选项 1,\n");
break;
case 2:
printf("你选择了选项 2,\n");
break;
case 3:
printf("你选择了选项 3,\n");
break;
default:
printf("错误:无效的选项!请输入 1, 2 或 3,\n");
break; // 这里 break 不是必须的,因为 default 是最后一个,但加上是好习惯
}
return 0;
}
执行情况分析:

(图片来源网络,侵删)
- 如果用户输入
1,输出你选择了选项 1。 - 如果用户输入
2,输出你选择了选项 2。 - 如果用户输入
3,输出你选择了选项 3。 - 如果用户输入
4、0或任何其他数字,由于没有case与之匹配,程序会直接执行default块,输出错误:无效的选项!。
示例 2:default 不在最后面
default 可以放在任何位置,但会影响代码的可读性。
#include <stdio.h>
int main() {
int number = 5;
switch (number) {
default:
printf("数字既不是 10 也不是 20,\n");
break;
case 10:
printf("数字是 10,\n");
break;
case 20:
printf("数字是 20,\n");
break;
}
return 0;
}
在这个例子中,number 的值是 5,它不等于 10 也不等于 20,所以程序会直接跳到 default 块执行,输出 数字既不是 10 也不是 20。,这与 default 的位置无关。
示例 3:没有 break 语句(贯穿 - Fallthrough)
在 switch 语句中,如果某个 case 的最后没有 break 语句,程序会“贯穿”到下一个 case 继续执行。default 也可以发生贯穿。
#include <stdio.h>
int main() {
char grade = 'B';
switch (grade) {
case 'A':
printf("优秀!\n");
break;
case 'B':
printf("良好,\n");
// 没有 break,会继续执行下面的 case 'C'
case 'C':
printf("及格,\n");
break;
default:
printf("需要努力,\n");
break;
}
return 0;
}
执行情况分析:
grade是'B',程序匹配到case 'B'。- 打印
良好。。 - 因为
case 'B'后面没有break,程序继续向下执行case 'C'的代码。 - 打印
及格。。 case 'C'后面有break,switch语句结束。
最终输出:
良好。
及格。
| 特性 | 描述 |
|---|---|
| 用途 | 在 switch 语句中,作为所有 case 都不匹配时的默认执行分支。 |
| 位置 | 可以放在 switch 语句内的任何位置,但通常放在最后。 |
| 可选性 | default 是 switch 语句的可选部分。 |
break |
default 块内的代码执行完毕后,通常需要一个 break 来退出 switch 语句,除非它位于最后或者有意让它发生“贯穿”。 |
| 重要性 | default 对于处理意外输入、错误情况和边界条件至关重要,能让程序更加健壮和用户友好。 |
