Linux講座にようこそ。このページは「C言語プログラミング入門 - 第4章.条件を判定して処理を振り分ける条件分岐」です。

C言語プログラミング入門

4. 条件を判定して処理を振り分ける条件分岐(2/2)

4.3 switch文

条件の真偽により3つ以上の処理に振り分けることはif文でもできますが、可読性がよくないため、プログラムが分かりにくいものになりがちです。そこで、switch文が使える場合はswitch文を使った方が良いでしょう。

4.3.1 形式

「switch (式)」の式の値と「case 定数:」の定数の値が等しい行以降の文を実行します。どの定数とも等しくない場合は「default:」以降の文を実行します。「default:」以降は省略可能です。

「(式)」と「定数」の式の値は整数型でなければなりません。char型は整数型ですので、半角1文字は取り扱うことが出来ます。

switch (式)
{ ← {と}で括ってブロックにします
    case 定数1:
        文1-1;
        文1-2;
        …
        文1-n;
    case 定数2:
        文2-1;
        文2-2;
        …
        文2-n;
        …
    case 定数n:
        文n-1;
        文n-2;
        …
        文n-n;
    default:
        文1;
        文2;
        …
        文n;
}
switch (式)
括弧で括って整数型となる式を指定します。通常は変数や四則演算の式を指定します。
case 定数1:
上記、式の値と比較する整数型の定数を指定します。区切り記号は:(コロン)ですので注意してください。
default:
「(式)」の値がどの定数とも一致しない場合に実行する文を指定します。

switch文から強制的に抜け出すにはbreak文を使用します。例えば、上記形式の「文1-n;」を実行後、switch文から抜け出すには「文1-n;」の次にbreak;を指定します。(breakを指定しないと、文2-1;以降の処理も行ってしまいます)

4.3.2 例題

メニュー番号の入力により、該当する四則演算を行い結果を出力します。また、メニュー番号が不当な場合はメッセージを出力します。

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int     bango;
  5.     double  atai1;
  6.     double  atai2;
  7.  
  8.     printf("四則演算を行います\n");
  9.     printf("1. 加算\n");
  10.     printf("2. 減算\n");
  11.     printf("3. 乗算\n");
  12.     printf("4. 除算\n");
  13.     printf("どの計算を行いますか。番号を入力してください ==> ");
  14.     scanf("%d", &bango);
  15.     printf("2つの値を入力してください ==> ");
  16.     scanf("%lf%lf", &atai1, &atai2);
  17.  
  18.     /* 番号により、処理を振り分ける */
  19.     switch (bango)
  20.     {
  21.       case 1:
  22.         /* 加算 */
  23.         printf("%lf + %lf = %lf\n", atai1, atai2, atai1 + atai2);
  24.         break; ← switch文を抜け出します。これが無いと、次の減算処理をしてしまいます
  25.       case 2:
  26.         /* 減算 */
  27.         printf("%lf - %lf = %lf\n", atai1, atai2, atai1 - atai2);
  28.         break;
  29.       case 3:
  30.         /* 乗算 */
  31.         printf("%lf × %lf = %lf\n", atai1, atai2, atai1 * atai2);
  32.         break;
  33.       case 4:
  34.         /* 除算 */
  35.         printf("%lf ÷ %lf = %lf\n", atai1, atai2, atai1 / atai2);
  36.         break;
  37.       default:
  38.         /* 上記以外 */
  39.         printf("番号が不当です\n");
  40.     }
  41.  
  42.     return 0;
  43. }
$  ./ex04_3.prg ← 上記例題を実行します
四則演算を行います
1. 加算
2. 減算
3. 乗算
4. 除算
どの計算を行いますか。番号を入力してください ==>  1
2つの値を入力してください ==>  12.34 56.78
12.340000 + 56.780000 = 69.120000
$
$  ./ex04_3.prg
四則演算を行います
1. 加算
2. 減算
3. 乗算
4. 除算
どの計算を行いますか。番号を入力してください ==>  5
2つの値を入力してください ==>  10 20
番号が不当です
$
8〜13行目
メニューを出力します。
14行目
どの演算を行うかを指定するためのメニュー番号を入力します。
19行目
入力されたメニュー番号(変数bango)により、処理を振り分けます。
21〜24行目
加算の処理を行い結果を出力します。24行目のbreak文でswitch文を抜け出します。
37〜39行目
メニュー番号(変数bango)が1〜4の値でない場合の処理で、メッセージを出力します。