web-dev-qa-db-ja.com

Cでenumを使用する方法

基本的に、レストランの待機キューにキュー(リンクリスト)を実装する必要があります。

enumを使用すると追加のポイントが得られますが、これまで使用したことはありません。私はこれが私がそれをどのように使用しているのか正しく見えますか?私はそれを調べましたが、リンクリストを使用した例を見ていません。

構造の手順は次のとおりです。

コードを記述するときは、待機リストのリンクリストのノードにC構造体を作成する必要があります。これらのデータ項目には、次のものが含まれている必要があります(必要に応じて他のものも含まれる場合があります)。

  • グループの名前

  • グループのサイズ(グループ内の人数)を指定する整数変数

  • レストラン内のステータス(enumを使用するための追加ポイント!)

  • リスト内の次のノードへのポインター

レストランのステータスはウォークインまたはコールインです(事前に電話して名前を待機リストに追加します)

これが私の構造です:

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]
16
ShadyBears

Struct typedefは基本的に「レコードに「ステータス」フィールドがある場合、値は「call」または値「wait」になる可能性があります。警告は基本的に「フィールドを割り当てなかった」ということです。

可能な変更:

enum status {CALL, WAIT};

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

詳細は次のとおりです。

11
paulsm4

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 StatusStatusなど)は構造体メンバーとは異なる名前空間にあるため、実際に使用できます。

enum status {call, wait} status;

コンパイラーは混乱しませんが、そうかもしれません。

多くの場合、人々はALL_CAPSで列挙定数を書きます。これは、部分的に#define WAIT 0の代わりに#define CALL 1enum Status { WAIT, CALL };を使用した時代からの二日酔いです。

7