C 语言中的 switch…case(C 语言中的 Switch 语句)及其示例

⚡ 智能摘要

C 语言中的 switch 语句将一个表达式与多个 case 标签进行比较,并运行匹配的块,当程序必须在多个固定的整数或字符值中进行选择时,它提供了一种比冗长的 if-else 链更简洁的替代方案。

  • 🔀 多路分支: switch 语句会测试一个表达式,并跳转到匹配的 case 标签。
  • 🏷️ 案例标签: 每个案例都使用一个以冒号结尾的唯一常量整数或字符标签。
  • 关键词: break 语句用于结束一个 case;如果没有它,程序将无法执行。
  • 🧩 默认情况: 当没有 case 标签与表达式匹配时,会运行可选的默认代码块。
  • 📋 切换规则: 案例标签保持不变且唯一,只允许使用一个默认标签。

C语言中的switch语句

C 语言中的 Switch 语句是什么?

C 语言中的 switch 语句会测试变量的值,并将其与多个 case 进行比较。一旦找到匹配的 case,就会执行与该 case 相关的语句块。

Switch 块中的每个 case 都有不同的名称/编号,称为标识符。用户提供的值将与 Switch 块内的所有 case 进行比较,直到找到匹配项。

如果未找到 case 匹配,则执行 default 语句,并且控制权离开 switch 块。

Switch Case 语法

在 C 程序中实现 switch-case 的一般语法如下:

switch( expression )
{
	case value-1:
			Block-1;
			Break;
	case value-2:
			Block-2;
			Break;
	case value-n:
			Block-n;
			Break;
	default:
			Block-1;
			Break;
}
Statement-x;
  • 表达式可以是整数表达式,也可以是字符表达式。
  • 值 1、2、n 是用于单独标识每个案例的案例标签。请记住,案例标签不应相同,因为这可能会在执行程序时产生问题。假设我们有两个案例的标签都为“1”。那么在执行程序时,即使您希望程序执行第二个案例,也会执行首先出现的案例。这会在程序中产生问题,并且不会提供所需的输出。
  • 案例标签始终以冒号 (:) 结尾。每个案例都与一个块相关联。
  • 块不过是针对特定情况分组的多个语句。
  • 每当执行 switch 时,测试表达式的值都会与我们在 switch 中定义的所有案例进行比较。假设测试表达式包含值 4。将此值与所有案例进行比较,直到在程序中找到标签为 XNUMX 的案例。一旦找到一个案例,就会执行与该特定案例相关的语句块,并且控制权将脱离 switch。
  • 每个 case 中的 break 关键字表示特定 case 的结束。如果我们不在每个 case 中放置 break,那么即使执行了特定 case,C 中的 switch 仍将继续执行所有 case,直到到达结尾。这不应该发生;因此我们总是必须在每个 case 中放置 break 关键字。一旦 case 执行完毕,break 将终止 case,并且控制权将脱离 switch。
  • default case 是可选的,只要 test-expression 的值不匹配 switch 中的任何一个 case,就会执行 default 语句,否则 switch 中就没必要写 default 了。
  • 一旦执行了开关,控制权将转到语句 x,程序将继续执行。

Switch 语句流程图

下图说明了如何在 switch case 中选择一个案例:

Switch 语句流程图

Switch 的工作原理

C 语言中的 Switch Case 示例

以下程序说明了 switch 的使用:

#include <stdio.h>
    int main() {
        int num = 8;
        switch (num) {
            case 7:
                printf("Value is 7");
                break;
            case 8:
                printf("Value is 8");
                break;
            case 9:
                printf("Value is 9");
                break;
            default:
                printf("Out of range");
                break;
        }
        return 0;
    }

输出:

Value is 8

C 语言中的 Switch Case 示例

  1. 在给定的程序中,我们已经初始化了一个 变量 值为 8 的数字。
  2. switch 结构用于比较变量 num 中存储的值并执行与匹配情况相关的语句块。
  3. 在这个程序中,由于变量 num 中存储的值为 8,因此 switch 将执行 case 标签为 XNUMX 的 case。执行完该 case 之后,控制权将脱离 switch,程序将通过在输出屏幕上打印该值来终止并显示成功结果。

尝试改变变量 num 的值并注意输出的变化。

例如,我们考虑以下默认的程序:

#include <stdio.h>
int main() {
int language = 10;
  switch (language) {
  case 1:
    printf("C#\n");
    break;
  case 2:
    printf("C\n");
    break;
  case 3:
    printf("C++\n");
    break;
  default:
    printf("Other programming language\n");}}

输出:

Other programming language

在 C 中使用 switch case 时,可以使用唯一标签对多个 case 进行分组。您需要在每个 case 中引入一个 break 语句,以便在 switch 语句的末尾进行分支。

当没有其他匹配时,可选的默认案例将运行。

我们考虑以下 switch 语句:

#include <stdio.h>
int main() {
int number=5;
switch (number) {
  case 1:
  case 2:
  case 3:
    printf("One, Two, or Three.\n");
    break;
  case 4:
  case 5:
  case 6:
    printf("Four, Five, or Six.\n");
    break;
  default:
    printf("Greater than Six.\n");}}

输出:

Four, Five, or Six.

C 语言中的嵌套 Switch

In C,我们可以将内层开关嵌入到外层开关中。此外,内层开关和外层开关的 case 常量可以具有共同的值,并且不会发生任何冲突。

我们考虑以下程序,该程序要求用户输入自己的ID。如果ID有效,程序会要求用户输入密码;如果密码正确,程序会打印用户名,否则打印“密码错误”;如果ID不存在,程序会打印“ID错误”。

#include <stdio.h>
int main() {
        int ID = 500;
        int password = 000;
        printf("Plese Enter Your ID:\n ");
        scanf("%d", & ID);
        switch (ID) {
            case 500:
                printf("Enter your password:\n ");
                scanf("%d", & password);
                switch (password) {
                    case 000:
                        printf("Welcome Dear Programmer\n");
                        break;
                    default:
                        printf("incorrect password");
                        break;
                }
                break;
            default:
                printf("incorrect ID");
                break;
        }
}

输出:

Plese Enter Your ID:
 500
Enter your password:
 000
Welcome Dear Programmer

C 语言中的嵌套 Switch

  1. 在给定的程序中,我们初始化了两个变量:ID 和 password。
  2. 外部 switch 语句用于比较变量 ID 中输入的值。它会执行与匹配情况(ID==500)关联的语句块。
  3. 如果块语句与匹配的情况一起执行,则使用内部 switch 来比较变量 password 中输入的值,并执行与匹配的情况关联的语句(当 password==000 时)。
  4. 否则,switch case 将触发默认情况并打印有关程序大纲的适当文本。

为什么我们需要 Switch 外壳?

有一个潜在的问题 if-else 语句 也就是说,只要可选路径的数量增加,程序的复杂性就会增加。如果在程序中使用多个 if-else 结构,程序可能会变得难以阅读和理解。有时甚至会让编写程序的开发人员感到困惑。

解决这个问题的方法是 switch 语句。

switch 语句的规则

在C语言中编写switch语句时,请遵循以下规则:

  • 表达式必须始终执行并产生结果。
  • 案例标签必须是常量且唯一的。
  • 案例标签必须以冒号 (:) 结尾。
  • 每种情况下都必须有一个 break 关键字。
  • 只能有一个默认标签。
  • 我们可以嵌套多个 switch 语句。

常见问题

AC 开关只接受 int、char 和 enum 值——绝不接受浮点数或字符串,因为每个标签都必须是一个常量整数。

如果没有中断,控制权就会丧失,并且会运行后面的所有案例——有时是故意的,但通常是意外的错误。

不行。C 语言不支持字符串类型的 switch 语句;标签必须是常量整数。请改用 if-else 语句中的 strcmp 函数来比较文本。

标准 C 禁止范围,但 GCC 允许非可移植的情况 1 … 5:可移植代码应该避免的扩展。

不。默认情况可以放在任何位置;它仅在没有匹配的标签时运行。放在最后只是约定俗成。

是的,但是要把 case 语句体用花括号括起来;否则,在标签后面进行声明可能会触发编译器错误。

是的。AI 代码助手会生成 switch 语句块,添加每个 break 语句,并标记意外的 fallthrough 语句。务必检查生成的逻辑。

GitHub 副驾驶 自动补全 case 标签,插入 break 语句,并将长的 if-else 链从注释转换为 switch。

总结一下这篇文章: