コース一覧
    C言語基礎 制御フロー編
    switch文

    C言語基礎 制御フロー編

    C言語の条件分岐と繰り返しを学び、処理の流れを組み立てるコースです。

    1
    条件分岐
    01. if文15分
    02. else ifで多分岐15分
    03. switch文15分
    04. 三項演算子15分
    05. 定番 FizzBuzz判定15分
    06. 条件の組み合わせ15分
    07. つくる 合否とランク判定15分
    08. 第3章クイズ10分
    2
    繰り返し
    01. for文15分
    02. while15分
    03. do-while15分
    04. breakとcontinue15分
    05. 二重ループ(九九)15分
    06. FizzBuzzループ版15分
    07. つくる N人分の入力15分
    08. 第4章クイズ10分

    switch文

    値そのもので分けるとき

    前回の else if は「90以上」「80以上」のような範囲の判定に向いています。一方で、前回付けたランクごとにコメントを出し分けたいときは、範囲ではなく「A のとき」「B のとき」という値そのものの一致です。こういうときは switch 文が読みやすくなります。

    c

    switch (rank) {
        case 'A':
            printf("素晴らしい成績です\n");
            break;
        case 'B':
            printf("よくできています\n");
            break;
        default:
            printf("不明なランクです\n");
            break;
    }

    switch の丸かっこの値と、各 case のうしろの値を上から順に照合し、一致したところへ飛びます。どれにも一致しなければ default へ行きます。default は省略できますが、else if の最後の else と同じで、想定外の値を受け止める場所として必ず書いてください。

    case に書けるのは定数だけ

    switch に渡せるのは整数として扱える値です。int と char が代表です。double は使えません。また case のうしろに書けるのは、コンパイルの時点で値が決まっている定数だけで、case score: のように変数を書くことも、case > 80: のように範囲を書くこともできません。範囲で分けたいときは else if の出番です。

    文字は 'A' のようにシングルクォートで囲みます。ダブルクォートの "A" は文字列で別物なので、ここでは使えません。

    break を忘れると下へ落ちる

    switch の最大の落とし穴がこれです。case は「そこへ飛び込む入口」でしかなく、区切りではありません。break に出会うまで、下の case のラベルを無視してそのまま実行を続けます。これをフォールスルーと呼びます。

    c

    char rank = 'B';
    switch (rank) {
        case 'A':
            printf("1");
        case 'B':
            printf("2");
        case 'C':
            printf("3");
            break;
        case 'D':
            printf("4");
    }

    出力は 23 です。'B' の入口から入り、break が無いのでそのまま case 'C' の中身まで実行し、そこの break でようやく抜けます。コンパイルエラーにはならないので、テストするまで気づけません。各 case の最後に break を書く、を体で覚えてください。

    要件

    1. scanf の書式は " %c" にして、char 型の変数へ読み込む
    2. まず「ランクはAです」の形で表示する
    3. A は「素晴らしい成績です」、B は「よくできています」、C は「合格ラインです」、D は「もう一息です」、F は「再履修が必要です」
    4. どれにも当てはまらない文字のときは「不明なランクです」と表示する
    5. if ではなく switch と case で書き、各 case に break を付ける

    ヒント

    書式の先頭に空白を入れた " %c" にすると、前に残っている改行を読み飛ばしてくれます

    文字はシングルクォートで case 'A': のように書きます

    break を忘れると、下の case のコメントまで続けて表示されます

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • 三項演算子

      条件によって値そのものを切り替えられるようになります。

    • 定番 FizzBuzz判定

      複合条件の定石を書けるようになります。

    • 条件の組み合わせ

      入れ子になった条件を整理して書けるようになります。

    • つくる 合否とランク判定

      分岐一式を組み合わせて合否とランクを出せるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • コメント# で1行コメント。
    • コンパイルソースをバイトコードへ変換する処理
    • 変数データに名前をつけて参照する仕組み
    • テストバグを見つける工程
    main.c
    エディタを読み込んでいます

    メモ

    switch文

    ⌘S で保存