在switch语句中使用enum类型

时间:2013-03-06 02:03:14

标签: c enums switch-statement

如果检测到某些特殊情况,我正在使用switch语句提前从我的main函数返回。特殊情况使用枚举类型进行编码,如下所示。

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语句在这里正常运行?谢谢!

3 个答案:

答案 0 :(得分:20)

没有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;
}

答案 1 :(得分:2)

您错过了最重要的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;
}

您创建了一些(未使用的)标签,其名称与枚举常量相同(这就是它编译的原因)。

答案 2 :(得分: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;

}