怎么不用switch验证变量在不连续的枚举范围内
时间: 2024-02-26 12:57:03 浏览: 10
如果枚举类型中的常量不是连续的,可以使用数组来实现验证。具体实现方式如下:
```
enum Fruit {
Apple = 0,
Orange = 2,
Banana = 5,
Grape = 6
};
int isFruit(enum Fruit fruit) {
static const int numFruits = Grape + 1;
static int isFruitArray[numFruits] = {1, 0, 1, 0, 0, 1, 1};
if (fruit < 0 || fruit >= numFruits) {
return 0;
}
return isFruitArray[fruit];
}
```
在以上代码中,`isFruit`函数的作用是验证传入的参数`fruit`是否在枚举类型`Fruit`中定义了常量。如果定义了,函数返回1,否则返回0。函数内部使用了一个静态的整型数组`isFruitArray`来保存枚举常量是否存在的信息,数组的下标表示枚举常量的值,数组的值表示该枚举常量是否存在。在函数内部,首先判断传入的参数是否超出了数组的范围,如果超出了,则返回0。否则根据数组的值来判断该枚举常量是否存在。
使用该函数的示例如下:
```
enum Fruit fruit = Apple;
if (isFruit(fruit)) {
printf("This is a fruit.\n");
} else {
printf("This is not a fruit.\n");
}
```
在以上代码中,首先声明一个枚举类型变量`fruit`,并将其初始化为`Apple`。然后调用`isFruit`函数验证`fruit`是否为一个水果,根据函数的返回值输出不同的提示信息。