c语言,有没有办法遍历枚举类型
答案:2 悬赏:0 手机版
解决时间 2021-03-08 07:03
- 提问者网友:欺烟
- 2021-03-07 22:33
c语言,有没有办法遍历枚举类型
最佳答案
- 五星知识达人网友:执傲
- 2021-03-07 23:40
在C语言中,枚举类型是被当做int或者unsigned int类型来处理的,所以按照C语言规范是没有办法遍历枚举类型的。
不过在一些特殊的情况下,可以实现有条件的遍历。
1 枚举类型必须连续。
由于枚举类型支持如下方式定义:
enum
{
ENUM_0,
ENUM_10 = 10,
ENUM_11
};
这样就会导致枚举类型不连续,这种枚举无法遍历。
2 枚举类型中人为加入起始及结束标记。
enum
{
ENUM_START,
ENUM_0,
ENUM_1,
ENUM_2,
ENUM_END
};
可以看到,在这个枚举类型中,人为加入可ENUM_START, 和ENUM_END。中间的ENUM_0,ENUM_1,ENUM_2才是实际的有效数据。当后续需要增删枚举元素时,也要保证ENUM_START, 和ENUM_END分别为最小和最大值。
满足以上两种条件下,就可以做枚举的遍历了,参考代码如下:
int i;
for(i = ENUM_START+1; i {
//使用枚举元素。
}
这个循环中,i的值就是所有有效的枚举元素值。
不过在一些特殊的情况下,可以实现有条件的遍历。
1 枚举类型必须连续。
由于枚举类型支持如下方式定义:
enum
{
ENUM_0,
ENUM_10 = 10,
ENUM_11
};
这样就会导致枚举类型不连续,这种枚举无法遍历。
2 枚举类型中人为加入起始及结束标记。
enum
{
ENUM_START,
ENUM_0,
ENUM_1,
ENUM_2,
ENUM_END
};
可以看到,在这个枚举类型中,人为加入可ENUM_START, 和ENUM_END。中间的ENUM_0,ENUM_1,ENUM_2才是实际的有效数据。当后续需要增删枚举元素时,也要保证ENUM_START, 和ENUM_END分别为最小和最大值。
满足以上两种条件下,就可以做枚举的遍历了,参考代码如下:
int i;
for(i = ENUM_START+1; i
//使用枚举元素。
}
这个循环中,i的值就是所有有效的枚举元素值。
全部回答
- 1楼网友:鱼忧
- 2021-03-08 00:02
就是你声明的这个枚举变量的值,只能取其中的东西,比如:enum {Monday,Tuesday,Wednesday,Thursday,Friday} weekday;那weekday这个变脸的值只能是{}中的值。(他们分别对应数字0,1,2,3,4,因为枚举型变量也是整型)追问枚举类型的元素,不一定是从0开始,+1递增的。
比如,
typedef enum
{
A,
B,
C = 6,
D,
E,
F,
G,
H
}alpha_enum;
enum liquid
{
OUNCE = 1,
CUP = 8,
PINT = 16,
QUART = 32,
GALLON = 128
};
如何用一个通用的方法来遍历。
比如,
typedef enum
{
A,
B,
C = 6,
D,
E,
F,
G,
H
}alpha_enum;
enum liquid
{
OUNCE = 1,
CUP = 8,
PINT = 16,
QUART = 32,
GALLON = 128
};
如何用一个通用的方法来遍历。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯