2013-03-21 34 views
-2

当我编译此代码时,它给我为什么这个枚举不起作用?

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

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

} 
+0

请参阅相关:http://stackoverflow.com/questions/3168306/print-text-instead-of-value-from-c-enum – 2013-03-21 14:20:30

回答

1

在C中,枚举与正常类型不在同一个名称空间中。如果你想定义一个类型为enum的变量,你可以这样做:

enum days dayVariable; 

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

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

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

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

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

这工作!我用k替换了一天。 – Lyrk 2013-03-21 14:53:23

4

如果是C,你必须写:

enum days dayVariable; 

... 

dayVariable = (enum days)k; 

如果你想days到是类型名称,typedef它:

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

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

P.S.

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

1

这不会编译之一:

dayVariable=days(k); 

days不是一个函数,并用C一般类型名(你似乎期望days是)不功能。您可能意味着:

dayVariable = (enum days) k; 

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

+0

(枚举日)k;似乎很奇怪。我们是否要整数天?你能再解释一下吗? – Lyrk 2013-03-21 14:56:01