17

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

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

这是我们结构的说明:

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

  • 组名

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

  • 餐厅内状态(使用枚举的额外积分!)

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

餐厅状态为walk-in或call-in(提前致电以将姓名列入等候名单)

这是我的结构:

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]
4

2 回答 2

11

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

可能的变化:

enum status {CALL, WAIT};

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

这里有更多信息:

于 2013-02-26T01:56:57.553 回答
7

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;

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

enum status {call, wait} status;

并且编译器不会感到困惑,但您很可能会感到困惑。

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

于 2013-02-26T02:01:26.060 回答