Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. C言語辞典
  3. switch / case / break / default

switch / case / break / default

整数値や文字などの値に応じて処理を分岐させます。複数の値で処理を切り替える場合、『if / else if』を連ねるより『switch / case』の方がすっきり書けます。

構文
switch (式) {
    case 値1:
        処理1;
        break;
    case 値2:
        処理2;
        break;
    case 値3:
    case 値4:
        処理3; // 値3と値4の両方でこの処理を実行します(フォールスルー)。
        break;
    default:
        デフォルトの処理;
        break;
}
キーワード一覧
キーワード概要
switch式を評価してマッチするcaseへジャンプします。式には整数型(int、char、enumなど)を使用できます。浮動小数点数や文字列は使えません。
case比較する定数値を指定します。コロンに続いて処理を書きます。値は定数(リテラルや定数式)でなければなりません。
breakswitchブロックから抜け出します。省略するとそのまま次のcaseの処理が実行されます(フォールスルー)。
defaultどのcaseにも一致しなかった場合に実行されます。省略可能ですが、想定外の値への対処として書くことを推奨します。
サンプルコード
#include <stdio.h>

int main(void) {
    // 整数値で分岐します。
    int day = 3;
    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("無効な値です。\n"); break;
    }

    // char型でも使用できます。
    char grade = 'B';
    switch (grade) {
        case 'A': printf("優秀です。\n"); break;
        case 'B': printf("良好です。\n"); break; // 『良好です。』と出力されます。
        case 'C': printf("合格です。\n"); break;
        default:  printf("不合格です。\n"); break;
    }

    // フォールスルーで複数の値をまとめて処理します。
    int month = 4;
    switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            printf("31日あります。\n"); break;
        case 4:
        case 6:
        case 9:
        case 11:
            printf("30日あります。\n"); break; // 『30日あります。』と出力されます。
        case 2:
            printf("28日または29日あります。\n"); break;
        default:
            printf("無効な月です。\n"); break;
    }

    return 0;
}
概要

『switch』は内部的にジャンプテーブルを使って実装されることが多く、多くの分岐がある場合に『if / else if』より効率的に動作します。『break』を書き忘れると、意図せず次の『case』の処理も実行されます(フォールスルー)。意図的なフォールスルーでない場合は必ず『break』を書いてください。

『switch』の式には整数型(『int』・『char』・『enum』など)しか使えません。文字列や浮動小数点数での分岐はできないため、その場合は『if / else』を使用してください。

関連する値をグループ化する場合は『enum(列挙型)』と組み合わせるとコードの可読性が向上します。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。