030. 使用switch语句处理多个条件

在C语言中,switch语句是一种用于处理多个条件的控制结构。它允许根据变量的值选择执行不同的代码块。switch语句通常比多个if-else if语句更清晰、更易于维护,尤其是在处理多个离散值时。

语法

switch语句的基本语法如下:

switch (expression) {
    case constant1:
        // 代码块1
        break;
    case constant2:
        // 代码块2
        break;
    // 可以有多个 case
    default:
        // 默认代码块
}
  • expression:一个整数表达式或枚举类型。

  • case constant:每个case后面跟着一个常量值,表示一个条件分支。

  • break:用于退出switch语句,防止代码继续执行到下一个case

  • default:可选的默认分支,当所有case都不匹配时执行。

示例1:基本的switch语句

以下是一个简单的示例,根据用户输入的数字打印不同的消息。

#include <stdio.h>

int main() {
    int choice;

    printf("Enter a number (1-3): ");
    scanf("%d", &choice);

    switch (choice) {
        case 1:
            printf("You entered 1.\n");
            break;
        case 2:
            printf("You entered 2.\n");
            break;
        case 3:
            printf("You entered 3.\n");
            break;
        default:
            printf("Invalid input.\n");
    }

    return 0;
}

输出结果

假设用户输入2,输出结果为:

Enter a number (1-3): 2
You entered 2.

示例2:处理字符输入

switch语句也可以用于处理字符类型。以下是一个示例,根据用户输入的字符打印不同的消息。

#include <stdio.h>

int main() {
    char grade;

    printf("Enter your grade (A, B, C, D, F): ");
    scanf(" %c", &grade); // 注意前面的空格,用于跳过前面的换行符

    switch (grade) {
        case 'A':
            printf("Excellent!\n");
            break;
        case 'B':
            printf("Good job!\n");
            break;
        case 'C':
            printf("Keep working!\n");
            break;
        case 'D':
            printf("You passed.\n");
            break;
        case 'F':
            printf("Failed.\n");
            break;
        default:
            printf("Invalid grade.\n");
    }

    return 0;
}

输出结果

假设用户输入B,输出结果为:

Enter your grade (A, B, C, D, F): B
Good job!

示例3:处理枚举类型

switch语句也可以用于处理枚举类型。以下是一个示例,根据用户选择的菜单项执行不同的操作。

#include <stdio.h>

enum MenuOption {
    OPTION_ADD,
    OPTION_SUBTRACT,
    OPTION_MULTIPLY,
    OPTION_DIVIDE,
    OPTION_EXIT
};

int main() {
    int choice;

    printf("Enter your choice:\n");
    printf("1. Add\n");
    printf("2. Subtract\n");
    printf("3. Multiply\n");
    printf("4. Divide\n");
    printf("5. Exit\n");
    scanf("%d", &choice);

    switch (choice) {
        case OPTION_ADD:
            printf("You chose Add.\n");
            break;
        case OPTION_SUBTRACT:
            printf("You chose Subtract.\n");
            break;
        case OPTION_MULTIPLY:
            printf("You chose Multiply.\n");
            break;
        case OPTION_DIVIDE:
            printf("You chose Divide.\n");
            break;
        case OPTION_EXIT:
            printf("Exiting program.\n");
            break;
        default:
            printf("Invalid choice.\n");
    }

    return 0;
}

输出结果

假设用户输入3,输出结果为:

Enter your choice:
1. Add
2. Subtract
3. Multiply
4. Divide
5. Exit
3
You chose Multiply.

示例4:使用switch语句处理多个条件

以下是一个示例,根据用户输入的月份打印对应的季节。

#include <stdio.h>

int main() {
    int month;

    printf("Enter a month (1-12): ");
    scanf("%d", &month);

    switch (month) {
        case 12:
        case 1:
        case 2:
            printf("Winter\n");
            break;
        case 3:
        case 4:
        case 5:
            printf("Spring\n");
            break;
        case 6:
        case 7:
        case 8:
            printf("Summer\n");
            break;
        case 9:
        case 10:
        case 11:
            printf("Autumn\n");
            break;
        default:
            printf("Invalid month.\n");
    }

    return 0;
}

输出结果

假设用户输入7,输出结果为:

Enter a month (1-12): 7
Summer

注意事项

  1. break语句:每个case块后面通常使用break语句,以防止代码继续执行到下一个case。如果省略break,代码会继续执行到下一个case,直到遇到breakswitch语句结束。
  2. default分支default分支是可选的,但建议始终包含,以处理所有未匹配的情况。
  3. 表达式的类型switch语句的表达式必须是整数类型(如intcharenum等)。

通过上述示例,你可以看到如何在C语言中使用switch语句处理多个条件:

  1. 定义switch语句:根据表达式的值选择执行不同的代码块。
  2. 使用case:每个case后面跟着一个常量值,表示一个条件分支。
  3. 使用break:在每个case块后面使用break,以防止代码继续执行到下一个case
  4. 使用default:处理所有未匹配的情况。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)