首页 > 编程笔记 > C语言笔记

C语言switch括号中的参数类型

在 C 语言中,switch 语句是一种强大的控制流结构,用于根据某个表达式的值执行不同的代码块。但是,switch 语句的括号中的参数(也称为控制表达式)具有特定的要求和限制。


switch 语句的基本语法如下:

switch (expression) {
    case constant1:
        // 代码块 1
        break;
    case constant2:
        // 代码块 2
        break;
    // 更多 case 语句
    default:
        // 默认代码块
}

switch 语句括号中的表达式(expression)必须是整数类型或者可以隐式转换为整数类型的值。具体来说,以下类型可以用作 switch 语句的控制表达式:


接下来,让我们通过一些示例来更好地理解这些类型的使用。


1) 使用整数类型作为 switch 表达式:

#include <stdio.h>

int main() {
    int choice = 2;
    
    switch (choice) {
        case 1:
            printf("You chose option 1\n");
            break;
        case 2:
            printf("You chose option 2\n");
            break;
        case 3:
            printf("You chose option 3\n");
            break;
        default:
            printf("Invalid choice\n");
    }
    
    return 0;
}

运行这段代码,输出结果为:

You chose option 2


2) 使用枚举类型作为 switch 表达式:

#include <stdio.h>

enum Days {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY};

int main() {
    enum Days today = WEDNESDAY;
    
    switch (today) {
        case MONDAY:
            printf("It's Monday. Time to start the work week.\n");
            break;
        case WEDNESDAY:
            printf("It's Wednesday. Halfway through the week!\n");
            break;
        case FRIDAY:
            printf("It's Friday. Weekend is near!\n");
            break;
        default:
            printf("It's another day of the week.\n");
    }
    
    return 0;
}

运行这段代码,输出结果为:

It's Wednesday. Halfway through the week!


3) 使用字符类型作为 switch 表达式:

#include <stdio.h>

int main() {
    char grade = 'B';
    
    switch (grade) {
        case 'A':
            printf("Excellent!\n");
            break;
        case 'B':
            printf("Good job!\n");
            break;
        case 'C':
            printf("You passed.\n");
            break;
        case 'D':
        case 'F':
            printf("You need to improve.\n");
            break;
        default:
            printf("Invalid grade.\n");
    }
    
    return 0;
}

运行这段代码,输出结果为:

Good job!

需要注意的是,switch 语句不支持浮点类型(如 float 或 double)作为控制表达式,这是因为浮点数的比较可能会因为精度问题而产生意外结果。如果你需要根据浮点值进行分支,应该使用 if else 语句结构。


此外,switch 语句的 case 标签必须是常量表达式,不能是变量或函数调用,这是因为编译器需要在编译时确定所有可能的分支。


声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。