特別なケースが検出された場合、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ステートメントを正しく機能させるにはどうすればよいですか?ありがとう!
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;
}
重要な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;
}
列挙定数と同じ名前のいくつかの(未使用の)ラベルを作成しました(それがコンパイルされた理由です)。
キーワード「ケース」を使用していません。以下のバージョンは正常に動作します。
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;
}