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

c语言case后面可以跟一个范围吗?

在C语言中,case 语句后面通常只能跟随单个常量值或常量表达式,而不能直接指定一个范围,这是C语言 switch case 结构的一个限制。然而,我们可以通过一些巧妙的方法来模拟范围匹配的效果。
 

首先,让我们回顾一下 switch case 的标准用法:

#include <stdio.h>

int main() {
    int day = 3;
    switch(day) {
        case 1:
            printf("Monday");
            break;
        case 2:
            printf("Tuesday");
            break;
        case 3:
            printf("Wednesday");
            break;
        default:
            printf("Other day");
    }
    return 0;
}

输出结果:

Wednesday

在这个例子中,每个 case 后面都跟着一个具体的值,这是C语言中 switch case 的标准用法。
 

虽然我们不能直接在 case 后面指定范围,但我们可以通过巧妙的设计来实现类似的效果。以下是几种常用的方法:

1. 使用多个 case 语句

对于小范围的值,我们可以列出范围内的所有值:

#include <stdio.h>

int main() {
    int score = 85;
    switch(score / 10) {
        case 10:
        case 9:
            printf("Grade A");
            break;
        case 8:
            printf("Grade B");
            break;
        case 7:
            printf("Grade C");
            break;
        default:
            printf("Grade D or below");
    }
    return 0;
}

输出结果:

Grade B

在这个例子中,我们通过 score / 10 将分数范围缩小到 0-10,然后使用多个 case 语句来覆盖不同的范围。

2. 在 case 中使用条件语句

对于较大的范围,我们可以在 case 中使用条件语句:

#include <stdio.h>

int main() {
    int age = 25;
    switch(1) {
        case 1:
            if (age >= 0 && age < 18) {
                printf("Minor");
            } else if (age >= 18 && age < 65) {
                printf("Adult");
            } else {
                printf("Senior");
            }
            break;
        default:
            printf("Invalid age");
    }
    return 0;
}

输出结果:

Adult

这种方法使用了一个永远为真的 case(case 1:),然后在其中使用 if else 语句来处理不同的范围。这种方法的优点是可以处理任意大小的范围,但可能会使代码看起来不那么直观。

3. 使用宏定义

我们可以使用宏定义来使代码更加清晰:

#include <stdio.h>

#define RANGE(low, high) (value >= low && value < high)

int main() {
    int value = 75;
    switch(1) {
        case RANGE(0, 50):
            printf("Low");
            break;
        case RANGE(50, 80):
            printf("Medium");
            break;
        case RANGE(80, 101):
            printf("High");
            break;
        default:
            printf("Out of range");
    }
    return 0;
}

输出结果:

Medium

这种方法结合了宏定义和前面提到的条件语句方法,它使代码更加清晰易读,同时保持了灵活性。但需要注意的是,这种方法可能会导致一些编译警告,因为它不符合 switch case 的标准用法。
 

虽然以上这些方法可以模拟范围匹配,但它们都有一些限制和潜在的问题:


在实际编程中,对于需要处理范围的情况,通常更推荐使用 if else 语句,它们更直观、灵活,并且不会引起混淆。switch case 结构更适合于处理离散的、已知的值集合。

相关文章