2013-03-06 14 views
12

Używam instrukcji switch, aby powrócić z mojej głównej funkcji wcześniej, jeśli wykryto jakiś specjalny przypadek. Przypadki specjalne są kodowane przy użyciu typu wyliczeniowego, jak pokazano poniżej.Używanie typu wyliczeniowego w instrukcji przełącznika

typedef enum { 
    NEG_INF, 
    ZERO, 
    POS_INF, 
    NOT_SPECIAL 
} extrema; 

int main(){ 

    // ... 

    extrema check = POS_INF; 

    switch(check){ 
     NEG_INF: printf("neg inf"); return 1; 
     ZERO: printf("zero"); return 2; 
     POS_INF: printf("pos inf"); return 3; 
     default: printf("not special"); break; 
    } 

    // ... 

    return 0; 

} 

O dziwo, gdy uruchamiam to, ciąg not special zostanie wydrukowany do konsoli, a reszta z głównych funkcji prowadzi do wykonania.

W jaki sposób można uzyskać tutaj prawidłowe ustawienie przełącznika? Dzięki! Etykiety:

Odpowiedz

16

No case. Masz teraz etykiety goto. Spróbuj:

switch(check){ 
    case NEG_INF: printf("neg inf"); return 1; 
    case ZERO: printf("zero"); return 2; 
    case POS_INF: printf("pos inf"); return 3; 
    default: printf("not special"); break; 
} 
+1

!! Powinienem to zobaczyć, ale nie zrobiłem tego. Niesamowite, co można przeczytać od razu i nie zauważyć. – zwol

+0

Och. mój. Bóg. Tak się przyzwyczaiłem do Veriloga, że ​​o tym zapomniałem. Ten kod C jest funkcjonalną symulacją dla mojego projektu Verilog. –

+0

Dziękuję bardzo! Przyjmuję twoją odpowiedź, gdy tylko pozwoli mi ..... –

1

Brakuje wszystkie ważne case:

switch(check){ 
    case NEG_INF: printf("neg inf");  return 1; 
    case ZERO: printf("zero");  return 2; 
    case POS_INF: printf("pos inf");  return 3; 
    default:  printf("not special"); break; 
} 

Ty stworzył kilka (nieużywane) etykiety o takich samych nazwach jak swoich stałych wyliczeniowych (dlatego jest skompilowany).

2

Nie użyłeś słowa kluczowego "case". Wersja podana poniżej będzie działać poprawnie.

typedef enum { 
    NEG_INF, 
    ZERO, 
    POS_INF, 
    NOT_SPECIAL 

} extrema; 

int main(){ 

    extrema check = POS_INF; 

    switch(check){ 
     case NEG_INF: printf("neg inf"); return 1; 
     case ZERO: printf("zero"); return 2; 
     case POS_INF: printf("pos inf"); return 3; 
     default: printf("not special"); break; 
    } 

    return 0; 

} 
Powiązane problemy