如何初始化Enum变量? 例如:
enum RANK{First=1,Second,Third};
main()
{
RANK r=0;
int marks=0;
printf("Enter the marks obtained\n");
scanf("%d",&marks);
if(marks>=90)
r=First;
else if(marks>=80)
r=Second;
else
r=Third;
printf("Rank=%d\n",r);
}
上面的代码给出了错误,告诉我不能用RANK中的整数值初始化枚举r = 0; 但我不明白为什么虽然枚举值是整数类型,但为什么会产生这个错误。
答案 0 :(得分:4)
enum的语法。
typedef enum {First=1,Second,Third} RANK;
RANK my_RANK = First;
如果您不想使用typedef,请使用此
enum RANK {First=1,Second,Third};
enum RANK my_RANK = First;
也可以像这样使用
enum { First=1,Second,Third } RANK = FIRST;
答案 1 :(得分:2)
正如其他人所指出的那样,错误似乎来自于枚举的错误使用。你要么必须声明一个枚举变量(sloppy style):
enum {First=1,Second,Third} rank;
...
rank = 0;
或更好,声明一个类型:
typedef enum
{
First=1,
Second=2,
Third=3
} rank_t;
...
rank_t r = 0;
作为旁注,最好是如上所述明确初始化所有枚举常量,或者根本不初始化。
如果在修复上述问题后仍然遇到问题,可能会将编译器设置为在某些警告时出错。就C语言而言,初始化为0很好。但是一些好的编译器增加了类型安全性,并且只要你在枚举类型和int之间进行隐式转换就会发出警告。在这种情况下,rank_t r = (rank_t)0;
应该解决它。
不知道你为什么要给枚举一个与其常数不对应的值,但这没有任何意义。
答案 2 :(得分:0)
enum RANK{First=1,Second,Third};
应该是
typedef enum {First=1,Second,Third} RANK;
使用类型RANK