基本上我们必须为餐馆等待队列实现一个队列(链表)。
我们使用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]
答案 0 :(得分: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;
以下是更多信息:
答案 1 :(得分: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;
您也可以为enum Status
创建一个typedef。由于标签(例如Status
中的enum Status
)与结构成员位于不同的名称空间,因此您可以实际使用:
enum status {call, wait} status;
并且编译器不会混淆,但你很可能会这样。
很多时候,人们在ALL_CAPS中编写枚举常量。这部分是使用#define WAIT 0
和#define CALL 1
而不是enum Status { WAIT, CALL };
时的宿醉。