如何在C中使用枚举

Sha*_*ars 16 c enums linked-list

基本上我们必须为餐馆等待队列实现队列(链表).

我们获得了额外的积分,enum但我以前从未使用过它.我想知道我的使用方式是否合适?我查了一下,但没有看到任何使用链表的例子.

以下是我们结构的说明:

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

  • 组的名称

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

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

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

餐厅状态是步入式或呼入式(提前打电话将名字放在等候名单上)

这是我的结构:

typedef struct restaurant
{
    char name[30];
    int groupSize;
    enum status{call, wait};
    struct restaurant *nextNode;
}list;
Run Code Online (Sandbox Code Playgroud)

我问,因为我在编译时收到此警告:

lab6.c:11:28: warning: declaration does not declare anything [enabled by default]
Run Code Online (Sandbox Code Playgroud)

pau*_*sm4 11

你的struct typedef基本上是说"如果我的记录中有一个"状态"字段,它可能有值"call"或值"wait".警告基本上是说"你从未分配过一个字段".

可能的变化:

enum status {CALL, WAIT};

typedef struct restaurant
{
    char name[30];
    int groupSize;
    enum status my_status;
    struct restaurant *nextNode;
}list;
Run Code Online (Sandbox Code Playgroud)

这里有更多信息:


Jon*_*ler 7

enum必须在结构外声明:

enum Status {call, wait};

typedef struct restaurant
{
    char name[30];
    int groupSize;
    struct restaurant *nextNode;
} list;
Run Code Online (Sandbox Code Playgroud)

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

typedef struct restaurant
{
    char name[30];
    int groupSize;
    enum Status {call, wait} status;
    struct restaurant *nextNode;
} list;
Run Code Online (Sandbox Code Playgroud)

或两者:

enum Status {call, wait};

typedef struct restaurant
{
    char name[30];
    int groupSize;
    enum Status status;
    struct restaurant *nextNode;
} list;
Run Code Online (Sandbox Code Playgroud)

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

enum status {call, wait} status;
Run Code Online (Sandbox Code Playgroud)

并且编译器不会混淆,但你很可能会.

通常,人们在ALL_CAPS中编写枚举常量.这部分是从使用#define WAIT 0#define CALL 1不是使用的日子来的宿醉enum Status { WAIT, CALL };.

  • 没有; 这是一个宿醉 - 人们从这一切都感到头痛. (3认同)