Использование типа перечисления в инструкции switch
Я использую оператор switch для возврата из моей основной функции раньше, если обнаружен какой-то особый случай. Специальные случаи кодируются с использованием типа перечисления, как показано ниже.
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;
}
Как ни странно, когда я запускаю это, строка not special
печатается на консоль, а остальная часть основной функции выполняется с выполнением.
Как я могу заставить оператор switch правильно функционировать здесь? Спасибо!
Ответы
Ответ 1
Нет case
. Теперь у вас есть метки goto
. Попробуйте:
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;
}
Ответ 2
Вы не использовали ключевое слово "case". Версия, приведенная ниже, будет работать нормально.
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;
}
Ответ 3
Вам не хватает важного 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;
}
Вы создали несколько (неиспользуемых) ярлыков с теми же именами, что и ваши константы перечисления (вот почему они скомпилированы).