【问题标题】:Why does this enum not work?为什么这个枚举不起作用?
【发布时间】:2013-03-21 14:15:38
【问题描述】:

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

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

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

 }

【问题讨论】:

标签: c enumeration


【解决方案1】:

如果是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 编程的书。

【讨论】:

    【解决方案2】:

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

    char *days[] = {"Monday", "Tuesday", ... "Sunday"};
    
    printf("%s", days[k]);
    

    【讨论】:

      【解决方案3】:

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

      enum days dayVariable;
      

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

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

      【讨论】:

        【解决方案4】:

        这也不会编译:

        dayVariable=days(k);
        

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

        dayVariable = (enum days) k;
        

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

        【讨论】:

        • (枚举天数) k;似乎很奇怪。我们将整数转换为天吗?你能再解释一下吗?
        猜你喜欢
        • 1970-01-01
        • 2019-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-05
        • 2021-10-21
        相关资源
        最近更新 更多