C言語入門|switch 文で分岐をスッキリ書く:if 連鎖の改良テクニック

「if 文はもう慣れてきたけど、
else if が何個も続くと、ちょっと読みにくいなぁ…🤔」

そんなふうに感じたこと、ありませんか?

実はその感覚、とっても正しいんです👍
同じ変数を何度も == で比較する if の連鎖 は、
C言語では switch 文 を使うことで、
ぐっとスッキリ書き直せる場合があります✨

この章では、

  • if–else if–else 構文の「もやっとポイント」
  • switch 文が得意な分岐パターン
  • switch 文の基本構文と考え方

を、例を交えながらやさしく解説していきます😊

if 連鎖が長くなると何がつらい?😵‍💫

まずは、よくある if–else if–else の例を見てみましょう。

int level = rand() % 4 + 1;

if (level == 1) {
    printf("ノーマルモード\n");
} else if (level == 2) {
    printf("ハードモード\n");
} else if (level == 3) {
    printf("エクストラモード\n");
} else {
    printf("カオスモード\n");
}

このコード、動きとしてはまったく問題ありません👍
でも、よく見ると…

  • 比較しているのはずっと同じ変数 level
  • 条件式はすべて level == 数値
  • else if が増えるほど縦に長くなる

という特徴がありますよね💡

こうしたケースでは、
switch 文を使うと、分岐の意図が一目で伝わる ようになります✨

switch 文が得意な分岐条件🎯

すべての if 文が switch に置き換えられるわけではありません。
switch 文が向いているのは、次の条件を満たす場合です。

switch 文に書き換えやすい条件

条件説明
比較が == のみ< や >、!= は使えない
同じ変数を比較毎回同じ変数をチェックしている
値が整数系char, short, int, long, enum など

今回の例は、
「同じ変数を整数と比較している」
という点で、まさに switch 向きですね😊

switch 文の考え方🧠

switch 文は、
「この値が、どのケースに当てはまるか?」
をまとめて分岐する構文です。

イメージとしては、

  • 条件値を1回だけ評価
  • 一致した case ラベルへジャンプ
  • 対応する処理を実行

という流れになります✨

switch 文の基本構文📘

switch (条件値) {
    case 値1:
        処理1
        break;
    case 値2:
        処理2
        break;
    default:
        処理X
}

それぞれの要素の意味を整理すると👇

要素役割
switch (条件値)分岐の元になる値
case 値:条件値と一致したときの入口
breakswitch 文を抜ける
defaultどの case にも当てはまらない場合

if 連鎖を switch 文に書き換えてみよう✨

先ほどの if–else if–else の例を、
switch 文で書き直してみます。

サンプルプログラム

int level = rand() % 4 + 1;

switch (level) {
    case 1:
        printf("ノーマルモード\n");
        break;
    case 2:
        printf("ハードモード\n");
        break;
    case 3:
        printf("エクストラモード\n");
        break;
    default:
        printf("カオスモード\n");
}

どうでしょう?😊

  • 条件が横並びで見やすい。
  • どの値で何が起きるか一目瞭然
  • 変数名が何度も出てこない。

と、かなりスッキリしましたよね✨

break を忘れるとどうなる?⚠️

switch 文で特に重要なのが break です。

break を書かないと、
次の case に処理が流れ込む(フォールスルー)
という動作になります。

switch (n) {
    case 1:
        printf("1です\n");
    case 2:
        printf("2です\n");
}

この場合、n が 1 だと
「1です」「2です」
の両方が表示されてしまいます😱

初心者のうちは、
case の最後には必ず break を書く
と覚えておくのが安全です👍

default は省略できるけど…🤔

default ラベルは省略できますが、
基本的には書いておくべき です。

理由は、

  • 想定外の値が来たときの保険になる。
  • デバッグ時に異常に気づきやすい。

からです😊

default:
    printf("未定義の値です\n");

こうした一文があるだけで、
プログラムの安心感がグッと上がります✨

まとめ:if と switch の使い分けが大事🌱

最後に、if 文と switch 文の役割を整理しておきましょう。

構文向いている場面
if 文範囲判定、複雑な条件式
if–else if–else条件が少ない場合
switch 文同じ変数を == で分岐する場合

「全部 switch にすればいい」わけではなく、
分岐の形に合わせて使い分ける のがポイントです😊