C 言語 switch-case 文の理解: 構文、例、ベストプラクティス
C 言語の switch 文とは?
switch 構造は単一の式を評価し、一致する case ラベルにプログラムフローを転送します。一致するものがない場合、オプションの default ブロックが実行されます。この意思決定ツールは、メニューオプション、エラーコード、ユーザー選択などの離散的な定数値を扱う場合に特に有用です。
各 case は定数式によって一意に識別されます。式の値が case ラベルと一致すると、対応する文ブロックが実行され、switch を抜けます (break が省略されている場合はフォールスルーが発生し、後続の case に実行が継続されます)。
switch-case 構文
switch (expression) {
case constant1:
// 文
break;
case constant2:
// 文
break;
// …
default:
// 文
break;
}
// switch 以降の文
expressionは整数型または列挙型に評価される必要があります。- case ラベルは定数値。重複すると曖昧さを生むため避けるべきです。
- 各
caseはコロンで終わり、その後にコードブロックが続きます。 breakで case を終了。省略すると後続 case に実行が継続 (フォールスルー)。defaultブロックはオプションで、どの case も一致しない場合にのみ実行。
switch 文の動作
以下のフローチャートは switch 文の決定プロセスを示しています:

例 1: 基本的な switch
#include <stdio.h>
int main() {
int num = 8;
switch (num) {
case 7:
printf("Value is 7");
break;
case 8:
printf("Value is 8");
break;
case 9:
printf("Value is 9");
break;
default:
printf("Out of range");
break;
}
return 0;
}
出力:
Value is 8
例 2: default の使用
#include <stdio.h>
int main() {
int language = 10;
switch (language) {
case 1:
printf("C#\n");
break;
case 2:
printf("C\n");
break;
case 3:
printf("C++\n");
break;
default:
printf("Other programming language\n");
}
return 0;
}
出力:
Other programming language
例 3: case の結合
#include <stdio.h>
int main() {
int number = 5;
switch (number) {
case 1:
case 2:
case 3:
printf("One, Two, or Three.\n");
break;
case 4:
case 5:
case 6:
printf("Four, Five, or Six.\n");
break;
default:
printf("Greater than Six.\n");
}
return 0;
}
出力:
Four, Five, or Six.
ネストした switch
switch はネスト可能で、階層的な意思決定を実現できます。以下はシンプルな認証フローの例です:
#include <stdio.h>
int main() {
int ID, password;
printf("Please Enter Your ID:\n");
scanf("%d", &ID);
switch (ID) {
case 500:
printf("Enter your password:\n");
scanf("%d", &password);
switch (password) {
case 0:
printf("Welcome Dear Programmer\n");
break;
default:
printf("Incorrect password\n");
}
break;
default:
printf("Incorrect ID\n");
}
return 0;
}
出力:
Please Enter Your ID: 500 Enter your password: 000 Welcome Dear Programmer

switch が長い if-else より優れている理由
if-else チェーンでも同じロジックを実現できますが、選択肢が増えると扱いにくくなります。switch 文はより明確な構文、優れた可読性を提供し、コンパイラによって定数式のジャンプテーブルに最適化される可能性があります。
switch 使用のルール
- 制御式は整数型または列挙型でなければならない。
- case ラベルは定数で一意の値でなければならない。
- 各 case ラベルはコロンで終わる。
- 意図しないフォールスルーを防ぐため
breakを使用。 defaultラベルは 1 つのみ許可。- ネストした switch は許可され、しばしば有用。
重要なポイント
- switch は離散値に対する堅牢な意思決定ツール。
- 常に
breakを含める (意図的なフォールスルーでない限り)。 - case ラベルを一意かつ定数に保つ。
defaultブロックはオプションだがエラー処理のために推奨。- ネストした switch は階層的な決定ロジックを提供。
C言語
- スイッチ付き回路:基本電気回路の実践ガイド
- C# switch 文をマスターする:構文、例、ベストプラクティス
- C++ do-while文:構文、実践例、ネストしたループ
- C++ switch文をマスター:構文、使い方、実践例
- C++ポインタをマスター:概念、例、実践的応用
- C++演算子オーバーロード:コード例付き実践ガイド
- C++関数を実例で徹底解説:基本から応用まで
- C#コレクション実践チュートリアル:実例で学ぶ柔軟なデータ管理
- Python print()関数の実践ガイド:基本から応用まで
- Python str.count()マスター:文字と部分文字列のカウント実例集
- Python round()関数を実例で徹底解説