【C言語】switch文について
switch文の概要
C言語の `switch` 文は、ある変数の値に基づいて処理を分岐させるための制御構文です。 `if` 文と異なり、特定の値ごとに異なる処理を簡潔に記述できます。
基本構文
基本的な `switch` 文の構文は以下のとおりです。
#include <stdio.h>
int main() {
int num = 2;
switch (num) {
case 1:
printf("数字は1です。\n");
break;
case 2:
printf("数字は2です。\n");
break;
case 3:
printf("数字は3です。\n");
break;
default:
printf("1, 2, 3以外の数字です。\n");
}
return 0;
}
`switch` 文の中では `case` を使って各値ごとの処理を指定し、`default` でどの `case` にも該当しない場合の処理を指定します。
breakの役割
`break` を使わないと、次の `case` の処理まで実行されてしまいます。
#include <stdio.h>
int main() {
int num = 2;
switch (num) {
case 1:
printf("1\n");
case 2:
printf("2\n");
case 3:
printf("3\n");
default:
printf("その他\n");
}
return 0;
}
この場合、`num` が `2` なので `”2″` が出力された後、`case 3` の `”3″` や `default` の `”その他”` も出力されます。
defaultの使い方
`default` はどの `case` にも該当しない場合に実行されます。必須ではありませんが、未定義の値に対する処理をする場合に有効です。
#include <stdio.h>
int main() {
int num = 5;
switch (num) {
case 1:
printf("1です。\n");
break;
case 2:
printf("2です。\n");
break;
default:
printf("その他の数字です。\n");
}
return 0;
}
実用的な例
文字を入力して、それに対応するメッセージを表示する例です。
#include <stdio.h>
int main() {
char grade;
printf("成績を入力してください (A, B, C, D, F): ");
scanf("%c", &grade);
switch (grade) {
case 'A':
printf("素晴らしい!\n");
break;
case 'B':
printf("良い成績です。\n");
break;
case 'C':
printf("合格ですが、改善が必要です。\n");
break;
case 'D':
printf("もう少し頑張りましょう。\n");
break;
case 'F':
printf("不合格です。\n");
break;
default:
printf("無効な成績です。\n");
}
return 0;
}
複数のcaseをまとめる
複数の `case` をまとめて同じ処理を行うことができます。
#include <stdio.h>
int main() {
char ch;
printf("文字を入力してください (y/n): ");
scanf("%c", &ch);
switch (ch) {
case 'y':
case 'Y':
printf("YES\n");
break;
case 'n':
case 'N':
printf("NO\n");
break;
default:
printf("無効な入力です。\n");
}
return 0;
}
switch文のネスト
`switch` 文の中に `switch` 文を入れることも可能です。
#include <stdio.h>
int main() {
int category = 1, subcategory = 2;
switch (category) {
case 1:
printf("カテゴリ1\n");
switch (subcategory) {
case 1:
printf("サブカテゴリ1\n");
break;
case 2:
printf("サブカテゴリ2\n");
break;
}
break;
case 2:
printf("カテゴリ2\n");
break;
}
return 0;
}
switch文とif文の使い分け
`switch` 文は特定の値と比較する場合に適していますが、範囲をチェックする場合は `if` 文の方が適しています。
if (x >= 10 && x <= 20) {
printf("10から20の範囲内\n");
}
注意点
- `switch` 文では `case` に変数を使用できません。
- `break` を忘れると意図しない処理が実行されます。
- `switch` 文は整数型に対して使用されることが多いです。