switch文とbreak文

switch文について

変数の値によって処理を選択したい場合には、switch文を使います。

switch(変数) {
        case 値1:       // 変数が値1の時に実行する
                文1;
                break;

        case 値2:       // 変数が値2の時に実行する
                文2;
                break;

        default:       // 変数が値1でも値2でもない時に実行する
                文3;
                break;
}

if-else文でも同じことができるのですが、こちらのほうが書きやすい場合もあります。
例えば、3択問題で、キーボードから「1,2,3」を入力として受け取って処理を分岐させたい場合などがこれにあたります。

では、実際にC言語で「switch文」を使ってみましょう。ファイル名はquiz.cとします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>

int main(void)
{
        int answer;

        printf("【問題】\n次のうち、存在しない高専はどれ?\n");
        printf("\t1.旭川高専\n");
        printf("\t2.山梨高専\n");
        printf("\t3.東京高専\n");
        printf("\t4.北九州高専\n");

        printf("答えを入力(1〜4) --> ");
        scanf("%d", &answer);

        switch(answer) {
                case 1:
                        printf("不正解!旭川高専はあります!(北海道旭川市)\n");
                        break;

                case 2:
                        printf("正解!!\n");
                        break;

                case 3:
                        printf("不正解!東京高専はあります!(東京都八王子市)\n");
                        break;

                case 4:
                        printf("不正解!北九州高専はあります!(福岡県北九州市)\n");
                        break;

                default:
                        printf("1から4までの整数を入力してください。\n");
                        break;
        }
        return 0;
}

break文を忘れるとどうなる?

break文を忘れるとどうなるか、試してみましょう。
今作ったquiz.cの31行目を消してからコンパイル・実行してみてください。

$ gcc -o quiz quiz.c
$ ./quiz
【問題】
次のうち、存在しない高専はどれ?
    1.旭川高専
    2.山梨高専
    3.東京高専
    4.北九州高専
答えを入力(1〜4) --> 4
不正解!北九州高専はあります!(福岡県北九州市)
1から4までの整数を入力してください。

以上のように、break文を忘れると、変数の値が比較する値であろうとなかろうと、下の文を実行してしまうので、気をつけましょう。

練習問題

1. クイズ

switch文を使って、好きなテーマでクイズを作りましょう。ファイル名は、myquiz.cとします。