如果检测到某些特殊情况,我正在使用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语句在这里正常运行?谢谢!
答案 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;
}