为什么这个枚举不起作用?

时间:2013-03-21 14:15:38

标签: c enumeration

当我编译这段代码时,它给了我

“[错误]未知类型名称'天'”。我做错了什么?

#include <stdio.h>

int main(void){

int k=0;
enum days {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};

days dayVariable;

printf("Enter number of the day: ");
scanf("%d",&k);

dayVariable=days(k);

printf("%s", dayVariable);

return 0;

 }

4 个答案:

答案 0 :(得分:4)

如果是C,你必须写:

enum days dayVariable;

...

dayVariable = (enum days)k;

如果您希望days成为类型名称,请键入def it:

typedef enum {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday} days;

除此之外,你在printf中使用了错误的格式说明符。

P.S。

请记住,C和C ++是不同的语言。从您的代码和误解中可以明显看出,您来自某些C ++背景。试着拿起一本关于C编程的书。

答案 1 :(得分:3)

枚举不是字符串。实际上星期一= 0,星期二= 1等。如果你想打印字符串,你可以这样做:

char *days[] = {"Monday", "Tuesday", ... "Sunday"};

printf("%s", days[k]);

答案 2 :(得分:1)

在C中,枚举与普通类型不在同一名称空间中。如果要定义类型为枚举的变量,可以执行以下操作:

enum days dayVariable;

或者,您可以为枚举定义标准类型。有很多类似的方法可以做到这一点;这是一个:

typedef enum {
    /* ... */
} days;

答案 3 :(得分:1)

这也不会编译:

dayVariable=days(k);

days不是函数,而在C中,一般类型名称(您似乎期望days)也不是函数。你可能意思是:

dayVariable = (enum days) k;

换句话说,使用简单的强制转换为正确的类型名称。