【问题标题】:How to use enum in C如何在 C 中使用枚举
【发布时间】:2013-02-11 08:42:53
【问题描述】:

基本上我们必须为餐厅等待队列实现一个队列(链表)。

使用enum 可以获得额外积分,但我以前从未使用过它。我想知道这看起来是否正确,我如何使用它?我已经查过了,但没有看到任何使用链表的示例。

这是我们结构的说明:

在编写代码时,您必须为等待列表的链表中的节点创建一个 C 结构体。这些数据项必须包括以下内容(如果需要,还可以包括其他内容)。

  • 组名

  • 指定组大小的整数变量(组中的人数)

  • 餐厅内状态(使用枚举加分!)

  • 指向链表中下一个节点的指针

餐厅状态为预约或呼入(提前致电以将姓名列入等候名单)

这是我的结构:

typedef struct restaurant
{
    char name[30];
    int groupSize;
    enum status{call, wait};
    struct restaurant *nextNode;
}list;

我之所以问,是因为我在编译时收到此警告:

lab6.c:11:28: warning: declaration does not declare anything [enabled by default]

【问题讨论】:

  • 您的问题到底是什么?不要只是把你的任务扔给那些你遇到构建错误的人。找出您遇到的问题,然后寻求帮助。
  • @juice - 老实说,我认为您提出了一个公平的问题,并且您真诚地做了尽职调查,试图自己回答。记住古老的“拉丁语”短语"illegitimi non carborundum" ;)

标签: c enums linked-list


【解决方案1】:

您的 struct typedef 基本上是在说“如果我的记录中有一个“状态”字段,它的值可能是“调用”或值“等待”。警告基本上是说“你从未分配过一个字段”。

可能的变化:

enum status {CALL, WAIT};

typedef struct restaurant
{
    char name[30];
    int groupSize;
    enum status my_status;
    struct restaurant *nextNode;
}list;

这里有更多信息:

【讨论】:

  • = CALL 表示法是什么?您是否可能混淆了 C 和 C++?
  • 我的错。已更正。我只是想说,我通常更喜欢“CALL”或“WAIT”等枚举值,而不是小写的“call”或“wait”。恕我直言...
  • 感谢您的中肯建议。我认为人们在这里很激进,因为一些海报要求 StackOverflow 用户做功课。我不想那样做。在这里的人们往往会忘记这个网站可以作为一个非常有用的学习工具。我已经说过我查找了枚举,但没有明确的链接列表示例。再次感谢。非常感谢。
【解决方案2】:

您的enum 必须在结构之外声明:

enum Status {call, wait};

typedef struct restaurant
{
    char name[30];
    int groupSize;
    struct restaurant *nextNode;
} list;

或者必须在结构中声明该类型的成员:

typedef struct restaurant
{
    char name[30];
    int groupSize;
    enum Status {call, wait} status;
    struct restaurant *nextNode;
} list;

或两者兼有:

enum Status {call, wait};

typedef struct restaurant
{
    char name[30];
    int groupSize;
    enum Status status;
    struct restaurant *nextNode;
} list;

您也可以为enum Status 创建一个typedef。由于标签(例如enum Status 中的Status)与结构成员位于不同的命名空间中,因此您实际上可以使用:

enum status {call, wait} status;

编译器不会感到困惑,但你可能会。

很多时候,人们在 ALL_CAPS 中编写枚举常量。这部分是使用 #define WAIT 0#define CALL 1 而不是 enum Status { WAIT, CALL }; 的日子遗留下来的。

【讨论】:

  • 也许你的意思是保持,而不是宿醉。
  • 否;这是宿醉——人们会因此而头疼。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多