【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で例外値もカバー

これらのポイントを意識し、実際にプログラムを書いて理解を深めましょう。