2013-02-26 20 views
15

Zasadniczo musimy zaimplementować kolejkę (połączoną listę) dla kolejki oczekujących na restaurację.Jak używać enum w C

Otrzymujemy dodatkowe punkty za używanie enum, ale nigdy wcześniej tego nie używałem. Zastanawiam się, czy to wygląda dobrze, jak go używam? Sprawdziłem, ale nie widziałem żadnych przykładów za pomocą połączonych list.

Oto instrukcje dla naszej struktury:

Podczas pisania kodu, należy utworzyć struct C dla węzłów w połączonej listy listy oczekiwania. Te elementy danych muszą zawierać następujące elementy (aw razie potrzeby mogą zawierać inne).

  • nazwa grupy

  • zmienna całkowita określająca wielkość grupy (liczba osób w grupie)

  • stan w-restauracja (dodatkowe punkty za korzystanie z enum!)

  • wskaźnik do następnego węzła na liście

stan Restauracja jest walk-in or call-in (zadzwonić z wyprzedzeniem, aby umieścić nazwisko na liście oczekujących)

Oto struktura kopalni:

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

Pytam bo dostać to ostrzeżenie, gdy mogę skompilować:

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

http://www.yolinux.com/TUTORIALS/C++Enum.html – congusbongus

+1

Na czym dokładnie polega twoje pytanie? Nie ograniczaj się tylko do osób, które mają błędy konstrukcyjne. Wskaż jeden problem, w którym utknąłeś, a następnie poproś o pomoc. –

+4

@juice - Szczerze myślę, że zadałeś uczciwe pytanie i że szczerze wykonałeś należytą staranność, starając się odpowiedzieć na to pytanie sam. Odwagi w starej "łacińskiej" frazy ["illegitimi non carborundum"] (http://en.wikipedia.org/wiki/Illegitimi_non_carborundum);) – paulsm4

Odpowiedz

11

Twój struct typedef jest w zasadzie mówiąc: „Gdybym Pole "status" w moim rekordzie mogło mieć wartość "call" lub wartość "wait". Ostrzeżenie w zasadzie mówi "nigdy nie przydzielono pola".

Możliwa zmiana:

enum status {CALL, WAIT}; 

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

Oto więcej informacji:

+0

Co to jest notacja '= CALL'? Czy może być mylące C i C++? –

+0

Moja zła. Poprawione. Chciałem tylko powiedzieć, że generalnie preferuję wartości wyliczeniowe, takie jak "CALL" lub "WAIT", niż małe "wywołanie" lub "oczekiwanie". IMHO ... – paulsm4

+1

Dziękuję za radę. Zakładam, że ludzie są tutaj agresywni, ponieważ niektóre plakaty proszą użytkowników StackOverflow, aby odrabiali zadania domowe. Nie próbuję tego zrobić. Ludzie tutaj zapominają, że ta strona może być użyta jako bardzo przydatne narzędzie do nauki. Stwierdziłem, że sprawdziłem enum, ale nie mam jednoznacznych przykładów dla połączonych list. Dzięki jeszcze raz. Bardzo doceniane. – juice

6

Twój enum musi albo być zadeklarowane poza strukturą:

enum Status {call, wait}; 

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

lub musi zadeklarować członkiem tego typu wewnątrz struktury:

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

lub obie:

enum Status {call, wait}; 

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

Można by utworzyć typedef dla enum Status też.A ponieważ znaczniki (takich jak Status w enum Status) znajdują się w innej przestrzeni nazw z elementów konstrukcji, można faktycznie korzysta:

enum status {call, wait} status; 

i kompilator nie będzie się mylić, ale może równie dobrze być.

Bardzo często ludzie piszą stałe wyliczeniowe w ALL_CAPS. Jest to częściowo kac z czasów używania #define WAIT 0 i #define CALL 1 zamiast z enum Status { WAIT, CALL };.

+0

Być może chodziło ci o trzymanie, a nie kac. – tar

+2

Nie; to kac - ludzie mają bóle głowy z tego wszystkiego. –