web-dev-qa-db-fra.com

Comment utiliser enum en C

Fondamentalement, nous devons implémenter une file d'attente (liste chaînée) pour une file d'attente de restaurant.

Nous obtenons des points supplémentaires pour l'utilisation de enum mais je ne l'ai jamais utilisé auparavant. Je me demande si cela ressemble à la façon dont je l'utilise? Je l'ai recherché mais je n'ai vu aucun exemple utilisant des listes chaînées.

Voici les instructions pour notre structure:

Lors de l'écriture de votre code, vous DEVEZ créer une structure C pour les nœuds de la liste chaînée de la liste d'attente. Ces éléments de données doivent inclure les éléments suivants (et peuvent en inclure d'autres si nécessaire).

  • le nom du groupe

  • la variable entière spécifiant la taille du groupe (nombre de personnes dans le groupe)

  • le statut en restaurant (points supplémentaires pour l'utilisation d'une énumération!)

  • un pointeur vers le nœud suivant dans la liste

Le statut du restaurant est walk-in ou call-in (appelez à l'avance pour mettre le nom sur la liste d'attente)

Voici ma structure:

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

Je demande parce que je reçois cet avertissement lorsque je compile:

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

Votre struct typedef dit essentiellement "Si j'avais un champ" status "dans mon enregistrement, il pourrait avoir la valeur" call "ou la valeur" wait ". L'avertissement dit essentiellement" vous n'avez jamais alloué de champ ".

Changement possible:

enum status {CALL, WAIT};

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

Voici plus d'informations:

11
paulsm4

Votre enum doit être déclaré en dehors de la structure:

enum Status {call, wait};

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

ou doit déclarer un membre de ce type à l'intérieur de la structure:

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

ou les deux:

enum Status {call, wait};

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

Vous pouvez créer un typedef pour le enum Status aussi. Et puisque les balises (telles que Status dans enum Status) sont dans un espace de noms différent des membres de la structure, vous pouvez réellement utiliser:

enum status {call, wait} status;

et le compilateur ne sera pas confondu mais vous pourriez bien l'être.

Très souvent, les gens écrivent des constantes d'énumération dans ALL_CAPS. Ceci est en partie une gueule de bois du temps de l'utilisation de #define WAIT 0 et #define CALL 1 au lieu de enum Status { WAIT, CALL };.

7
Jonathan Leffler