
C言語基礎|switch文による分岐処理
これまで学習してきた if 文は、
条件の判定結果によって 処理を2方向(真/偽)に分ける 文でした。
一方で、
「値によって処理を3通り、4通りに分けたい」
という場面も、実際のプログラムではよくあります。
そのようなときに活躍するのが switch 文 です。
switch 文を使うと、1つの式の値に基づいて、複数の分岐をすっきり表現できます。

if文で書いた分岐の例
まずは、if 文で書いたプログラムを確認しましょう。
次のプログラムは、入力された数値を 4で割った剰余 によって、
表示するメッセージを切り替えるものです。
if文による分岐
プロジェクト名:chap3-13-1 ソースファイル名:chap3-13-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
// 数値を4で割った剰余を表示(if文)
#include <stdio.h>
int main(void)
{
int value;
printf("数値を入力してください:");
scanf("%d", &value);
if (value % 4 == 0)
puts("4で割り切れます。");
else if (value % 4 == 1)
puts("4で割った余りは1です。");
else if (value % 4 == 2)
puts("4で割った余りは2です。");
else
puts("4で割った余りは3です。");
return 0;
}この書き方の問題点
| 問題点 | 内容 |
|---|---|
| 同じ計算の繰り返し | value % 4 を何度も計算している。 |
| 修正ミスの原因 | 条件式を書き換えるときに漏れが出やすい。 |
| 可読性 | 分岐が増えるほど読みにくくなる。 |
1つの値を基準に分岐する場合は、
if 文よりも switch 文のほうが向いています。
switch文の基本構造
switch 文は、次のような構造を持っています。
switch (制御式) {
case 定数1:
文;
break;
case 定数2:
文;
break;
default:
文;
}| 要素 | 役割 |
|---|---|
| 制御式 | 評価される値(整数型) |
| case | 値ごとの分岐先(ラベル) |
| break | switch 文から抜ける。 |
| default | どの case にも一致しない場合 |
※ 制御式の型は 整数型(intなど) でなければなりません。
switch文を使った書き直し
先ほどの if 文のプログラムを、
switch 文を使って書き直してみましょう。
switch文による分岐
プロジェクト名:chap3-13-2 ソースファイル名:chap3-13-2.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
// 数値を4で割った剰余を表示(switch文)
#include <stdio.h>
int main(void)
{
int value;
printf("数値を入力してください:");
scanf("%d", &value);
switch (value % 4) {
case 0:
puts("4で割り切れます。");
break;
case 1:
puts("4で割った余りは1です。");
break;
case 2:
puts("4で割った余りは2です。");
break;
case 3:
puts("4で割った余りは3です。");
break;
}
return 0;
}改善されたポイント
| 項目 | 内容 |
|---|---|
| 計算回数 | value % 4 は1回だけ |
| 可読性 | 分岐の対応関係が一目で分かる。 |
| 修正 | メッセージ変更が簡単 |
caseラベルとは何か
switch 文では、case の後ろに書かれた値が
プログラムの飛び先を示す ラベル になります。
case 2:
puts("4で割った余りは2です。");この case 2 は、
- 制御式の値が 2 のとき
- この位置から処理を開始する
という意味を持ちます。
ラベルのルール
| ルール | 内容 |
|---|---|
| 定数のみ | 変数は使えない。 |
| 重複不可 | 同じ値の case は書けない。 |
| 書式 | case と値の間には空白が必要 |
break文の役割
case に到達すると、
その位置から 下方向に処理が続行されます。
そこで重要になるのが break 文 です。
break;break文の働き
| 項目 | 内容 |
|---|---|
| 役割 | switch 文を即座に終了 |
| 効果 | 次の case へ落ちない |
| 日本語 | 「抜け出す」「中断する」 |
break がない場合、
次の case の処理まで実行されてしまう点には注意が必要です。
switch文が向いている場面
| 状況 | 推奨 |
|---|---|
| 単一の整数値で分岐 | switch文 |
| 条件が範囲判定 | if文 |
| 複雑な条件式 | if文 |
| メニュー選択 | switch文 |
重要ポイントまとめ
- switch 文は 1つの値で多分岐するための文
- 制御式は 整数型
- case は 定数ラベル
- break を忘れると意図しない動作になる。
次のステップとしては、
👉 break を省略したときの挙動
👉 default の使いどころ
👉 switch文で起こりやすいミス
を学ぶと、理解が一段深まりますよ。
