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

C 为什么这个枚举不起作用?,c,enumeration,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=

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

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

#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;

 }
#包括
内部主(空){
int k=0;
枚举日{星期一、星期二、星期三、星期四、星期五、星期六、星期日};
日变量;
printf(“输入日期:”);
scanf(“%d”和“&k”);
dayVariable=天数(k);
printf(“%s”,dayVariable);
返回0;
}

枚举不是字符串。实际星期一=0、星期二=1等。如果要打印字符串,可以执行以下操作:

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

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

如果是C,你必须写:

enum days dayVariable;

...

dayVariable = (enum days)k;
如果希望
days
作为类型名称,请键入def:

typedef enum {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday} days;
除此之外,您在printf中使用了错误的格式说明符

附言


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

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

enum days dayVariable;
或者,可以为枚举定义标准类型。有许多类似的方法可以做到这一点;这里有一个:

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

这也不会编译:

dayVariable=days(k);
days
不是一个函数,在C语言中,一般类型名称(您似乎期望
days
是)也不是函数。你的意思可能是:

dayVariable = (enum days) k;
换句话说,使用一个简单的强制转换到正确的类型名。

请参阅相关:(枚举天数)k;看起来很奇怪。我们是否将整数转换为天?你能再解释一下吗?