【C言語】switch文について

【C言語】switch文について

switch文の概要

C言語の `switch` 文は、ある変数の値に基づいて処理を分岐させるための制御構文です。 `if` 文と異なり、特定の値ごとに異なる処理を簡潔に記述できます。

基本構文

基本的な `switch` 文の構文は以下のとおりです。


#include <stdio.h>

int main() {
    int num = 2;
    
    switch (num) {
        case 1:
            printf("数字は1です。\n");
            break;
        case 2:
            printf("数字は2です。\n");
            break;
        case 3:
            printf("数字は3です。\n");
            break;
        default:
            printf("1, 2, 3以外の数字です。\n");
    }
    
    return 0;
}

`switch` 文の中では `case` を使って各値ごとの処理を指定し、`default` でどの `case` にも該当しない場合の処理を指定します。

breakの役割

`break` を使わないと、次の `case` の処理まで実行されてしまいます。


#include <stdio.h>

int main() {
    int num = 2;
    
    switch (num) {
        case 1:
            printf("1\n");
        case 2:
            printf("2\n");
        case 3:
            printf("3\n");
        default:
            printf("その他\n");
    }
    
    return 0;
}

この場合、`num` が `2` なので `”2″` が出力された後、`case 3` の `”3″` や `default` の `”その他”` も出力されます。

defaultの使い方

`default` はどの `case` にも該当しない場合に実行されます。必須ではありませんが、未定義の値に対する処理をする場合に有効です。


#include <stdio.h>

int main() {
    int num = 5;
    
    switch (num) {
        case 1:
            printf("1です。\n");
            break;
        case 2:
            printf("2です。\n");
            break;
        default:
            printf("その他の数字です。\n");
    }
    
    return 0;
}

実用的な例

文字を入力して、それに対応するメッセージを表示する例です。


#include <stdio.h>

int main() {
    char grade;
    
    printf("成績を入力してください (A, B, C, D, F): ");
    scanf("%c", &grade);
    
    switch (grade) {
        case 'A':
            printf("素晴らしい!\n");
            break;
        case 'B':
            printf("良い成績です。\n");
            break;
        case 'C':
            printf("合格ですが、改善が必要です。\n");
            break;
        case 'D':
            printf("もう少し頑張りましょう。\n");
            break;
        case 'F':
            printf("不合格です。\n");
            break;
        default:
            printf("無効な成績です。\n");
    }
    
    return 0;
}

複数のcaseをまとめる

複数の `case` をまとめて同じ処理を行うことができます。


#include <stdio.h>

int main() {
    char ch;
    
    printf("文字を入力してください (y/n): ");
    scanf("%c", &ch);
    
    switch (ch) {
        case 'y':
        case 'Y':
            printf("YES\n");
            break;
        case 'n':
        case 'N':
            printf("NO\n");
            break;
        default:
            printf("無効な入力です。\n");
    }
    
    return 0;
}

switch文のネスト

`switch` 文の中に `switch` 文を入れることも可能です。


#include <stdio.h>

int main() {
    int category = 1, subcategory = 2;

    switch (category) {
        case 1:
            printf("カテゴリ1\n");
            switch (subcategory) {
                case 1:
                    printf("サブカテゴリ1\n");
                    break;
                case 2:
                    printf("サブカテゴリ2\n");
                    break;
            }
            break;
        case 2:
            printf("カテゴリ2\n");
            break;
    }

    return 0;
}

switch文とif文の使い分け

`switch` 文は特定の値と比較する場合に適していますが、範囲をチェックする場合は `if` 文の方が適しています。


if (x >= 10 && x <= 20) {
    printf("10から20の範囲内\n");
}

注意点

  • `switch` 文では `case` に変数を使用できません。
  • `break` を忘れると意図しない処理が実行されます。
  • `switch` 文は整数型に対して使用されることが多いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です