
【6日でできるC言語入門】switch文
C言語で複数の条件分岐を行う場合、switch文はとても便利な構文です。if文では条件ごとに何度も比較式を書く必要がありますが、switch文を使うと複数の選択肢をスッキリ記述できます。
ここでは、switch文の基本から応用、if文との違い、さらにフォールスルーの仕組みまでをわかりやすく解説します。

1.switch文の基本構造と使い方
1.1. switch文の書式と動作
switch文の基本的な書式は次の通りです。
switch(判定する式){
case 値1:
// 値1の場合の処理
break;
case 値2:
// 値2の場合の処理
break;
// 必要に応じてcaseを追加
default:
// どのcaseにも該当しない場合の処理
break;
}switch(判定する式)には整数型(またはchar型など)の値を指定します。- 各caseには、判定したい値を記述し、その下に対応する処理を記述します。
break;でそのcaseの処理を終了し、switch文の外へ抜けます。default:はどのcaseにも該当しない場合に実行される部分です(省略可能)。
サンプルプログラム1:曜日の番号から日本語の曜日名を表示
プロジェクト/ファイル名: Lesson24_1/main.c
#include <stdio.h>
int main(void) {
int day;
printf("曜日を番号で入力してください(1:月~7:日):");
scanf("%d", &day);
switch (day) {
case 1:
printf("月曜日です。\n");
break;
case 2:
printf("火曜日です。\n");
break;
case 3:
printf("水曜日です。\n");
break;
case 4:
printf("木曜日です。\n");
break;
case 5:
printf("金曜日です。\n");
break;
case 6:
printf("土曜日です。\n");
break;
case 7:
printf("日曜日です。\n");
break;
default:
printf("1~7の範囲で入力してください。\n");
break;
}
return 0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
曜日を番号で入力してください(1:月〜7:日):3
水曜日です。
曜日を番号で入力してください(1:月〜7:日):9
1〜7の範囲で入力してください。1.2. if文との違い
switch文は、「値が一致するか」を判定したい場合に最適です。if文は、大小比較や複雑な条件判定にも使えますが、複数の「値の一致」だけを分岐したいときはswitch文のほうが読みやすく、効率的に記述できます。
| 構文 | 得意な分岐 |
|---|---|
| if文 | 比較演算(大小、不等号など)、複雑な条件 |
| switch文 | 複数の値の一致 |
2.switch文の応用:フォールスルー
2.1. フォールスルーとは
switch文では、break;を書かないと、次のcaseの処理へ「そのまま流れ込む」ことができます。
この仕組みを「フォールスルー(fall through)」と呼びます。
フォールスルーを活用すると、複数のcaseで同じ処理を簡潔にまとめられます。
2.2. サンプルプログラム2:季節に応じたメッセージ
プロジェクト/ファイル名: Lesson24_2/main.c
#include <stdio.h>
int main(void) {
int season;
printf("季節を番号で入力してください(1:春 2:夏 3:秋 4:冬):");
scanf("%d", &season);
switch (season) {
case 1:
printf("新しい始まりの春です。\n");
break;
case 2:
case 3:
printf("過ごしやすい季節です。\n");
break;
case 4:
printf("寒い冬です。\n");
break;
default:
printf("1~4の範囲で入力してください。\n");
break;
}
return 0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
季節を番号で入力してください(1:春 2:夏 3:秋 4:冬):2
過ごしやすい季節です。
季節を番号で入力してください(1:春 2:夏 3:秋 4:冬):3
過ごしやすい季節です。
季節を番号で入力してください(1:春 2:夏 3:秋 4:冬):4
寒い冬です。上記の例では、「2:夏」「3:秋」のどちらでも「過ごしやすい季節です。」と表示されます。
これはcase 2:とcase 3:でbreakを書かず、case 3:の処理へ続くことで実現しています。
3.switch文の注意点とテクニック
3.1. フォールスルーの利用は慎重に
フォールスルーは便利ですが、**break;**の書き忘れによる意図しない動作を引き起こすこともあります。
「意図してフォールスルーさせる場合」と「単なる書き忘れ」をしっかり区別しましょう。
3.2. default節は省略可能だが推奨
defaultは必須ではありませんが、予期せぬ値への対処やエラーメッセージを表示するために必ず記述する習慣をつけるのが望ましいです。
まとめ
switch文は、整数や文字による値の一致に最適な分岐処理です。
if文よりも記述がすっきりし、複数のcaseを効率的に処理できます。
- フォールスルーの活用で共通処理も簡単
- breakの付け忘れには注意
- defaultで例外値もカバー
これらのポイントを意識し、実際にプログラムを書いて理解を深めましょう。
