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

 }
4

4 回答 4

4

如果是 C,你必须写:

enum days dayVariable;

...

dayVariable = (enum days)k;

如果您想days成为类型名称,请 typedef 它:

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

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

附言

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

于 2013-03-21T14:17:44.913 回答
3

枚举不是字符串。Acutally Monday=0, Tuesday=1, etc. 如果你想打印字符串,你可以这样做:

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

printf("%s", days[k]);
于 2013-03-21T14:17:29.717 回答
1

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

enum days dayVariable;

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

typedef enum {
    /* ... */
} days;
于 2013-03-21T14:18:31.140 回答
1

这也不会编译:

dayVariable=days(k);

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

dayVariable = (enum days) k;

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

于 2013-03-21T14:23:32.287 回答