C 语言中的 switch…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;
  • 表达式可以是整数表达式或字符表达式。
  • Value-1, 2, n 是 case 标签,用于单独标识每个 case。请记住,case 标签不应相同,因为这可能会在执行程序时产生问题。假设我们有两个具有相同标签“1”的 case。那么在执行程序时,即使您希望程序执行第二个 case,第一个出现的 case 也会被执行。这会在程序中产生问题,并且不会提供所需的输出。
  • Case 标签始终以冒号( : )结尾。每个 case 都与一个块相关联。
  • 块是指为特定 case 分组的多个语句。
  • 每当执行 switch 时,test-expression 的值都会与我们在 switch 中定义的所有 case 进行比较。假设 test expression 包含值 4。此值将与所有 case 进行比较,直到程序中找到标签为四的 case。一旦找到 case,与该特定 case 关联的语句块就会执行,控制权将移出 switch。
  • 每个 case 中的 break 关键字表示一个特定 case 的结束。如果我们不在每个 case 中都放置 break,那么即使执行了特定 case,C 语言的 switch 也会继续执行所有 case 直到到达末尾。这种情况不应该发生;因此,我们总是在每个 case 中放置 break 关键字。Break 将在执行完 case 后终止该 case,并将控制权移出 switch。
  • default case 是可选的。每当 test-expression 的值与 switch 内的任何 case 不匹配时,将执行 default。否则,不一定需要在 switch 中编写 default。
  • 一旦 switch 执行完毕,控制权将转移到 statement-x,程序的执行将继续。

Switch 语句流程图

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

Switch Statement Flowchart
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

Switch Case Example in C

  1. 在给定的程序中,我们已经初始化了一个 变量 num,值为 8。
  2. 使用 switch 结构来比较变量 num 中存储的值,并执行与匹配 case 关联的语句块。
  3. 在此程序中,由于变量 num 中存储的值为八,switch 将执行 case 标签为 8 的 case。执行 case 后,控制权将移出 switch,程序将成功终止,并在输出屏幕上打印该值。

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

例如,我们考虑以下包含 default 的程序

#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 语句末尾进行分支。

当没有其他匹配项时,可选的 default case 将运行。

我们考虑以下 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

C 语言 中,我们可以在外部 switch 中嵌入内部 switch。此外,内部 switch 和外部 switch 的 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

Nested Switch in C

  1. 在给定的程序中,我们已经解释了如何初始化两个变量:ID 和 password
  2. 使用外部 switch 结构来比较 ID 变量中输入的值。它执行与匹配 case(当 ID==500 时)关联的语句块。
  3. 如果语句块与匹配的 case 一起执行,则使用内部 switch 来比较 password 变量中输入的值,并执行与匹配 case(当 password==000 时)关联的语句。
  4. 否则,switch case 将触发 default case,并根据程序大纲打印相应的文本。

为什么我们需要 Switch Case?

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

解决此问题的方法是使用 switch 语句。

Switch 语句的规则

  • 表达式的结果必须始终是可执行的。
  • Case 标签必须是常量且唯一的。
  • Case 标签必须以冒号( : )结尾。
  • 每个 case 都必须包含一个 break 关键字。
  • 只能有一个 default 标签。
  • 我们可以嵌套多个 switch 语句。

摘要

  • Switch 是‘C 语言’中的一种决策构造。
  • 当涉及多个决策时,switch 会在程序中使用。
  • Switch 必须包含一个可执行的 test-expression。
  • 每个 case 都必须包含一个 break 关键字。
  • Case 标签必须是常量且唯一的。
  • Default 是可选的。
  • 多个 switch 语句可以嵌套在一起。