第七章 switch


switch                                                                                                                                 
switch は、ある式の値が、複数ある定整数式と等しいものがあるか判定し、
それに応じて分岐させるときに用います。
        switch (式)
        {
        case 定整数式: 文
        case 定整数式: 文
        default: 文
        }
switch (式) の式も case 定整数式: と同様に、定数であり整数である必要があります。

<switch>
#include<stdio.h>
main()
{
    int c;
    c=getchar();
    switch (c)
    {
    case 'a':    /* cがaのとき */
        printf("aです\n");
        break;
    case 'b':    /* cがbのとき */
        printf("bです\n");
        break;
    default:    /* cがa,b以外のとき */
        printf("a,b以外です\n");
        break;
    }
}
<実行結果1>
a
aです
<実行結果2>
b
bです
<実行結果3>
c
a,b以外です

<実行結果>はそれぞれ、a,b,c を入力したときのものです。
case の後の a と b が ' ' で囲んであるのは、それらが定整数式でなければならないからです。
' ' で囲むことによって、a や b がそれぞれ与えられている番号によって扱われるようになります。
第六章参照
case の後にある : は今までの ; ではなく : であることに注意してください。
また、それぞれの case で行いたい処理を書いた後は必ず break; を書いてください。
これがないと、次に break; が出てくるまで、switch を抜け出しません。
次のプログラムを見てください。上のプログラムの break; を省いてみました。

<break なし>
#include<stdio.h>
main()
{
    int c;
    c=getchar();
    switch (c)
    {
    case 'a':
        printf("aです\n");
    case 'b':
        printf("bです\n");
    default:
        printf("a,b以外です\n");
    }
}
<実行結果1>
a
aです
bです
a,b以外です
<実行結果2>

bです
a,b以外です
<実行結果3>
c
a,b以外です

このように、switch の各条件により実行するはずの処理を、
与えた条件から順番にすべて実行してしまいます。
このように break; を省いたプログラムはエラーではなく、次のように用いられます。

<偶数と奇数>
#include<stdio.h>
main()
{
    int c;
    c=getchar();
    switch (c)
    {
    case '0': case '2': case '4': case '6': case '8':
        printf("偶数です\n");
        break;
    case '1': case '3': case '5': case '7': case '9':
        printf("奇数です\n");
        break;
    default:
        printf("数字ではありません\n");
        break;
    }
}
<実行結果1>
2
偶数です
<実行結果2>
3
奇数です
<実行結果3>
a
数字ではありません

<実行結果>を見ればわかると思いますが、break; を書く,書かないによって、
分岐が多数あっても同じ処理を行いたい場合などに利用することができます。

break と continue
switch から抜け出すために用いた break は、
for ,while ,do から抜け出したいときにも用いることができます。
break は最も内側の switch ,for ,while ,do から抜け出します。

for ,while ,do の繰り返しの途中で continue があると、
その continue のところで、直ちにそのループの、次の繰り返しを開始させます。
continue は break と異なり、ループに対して使えるだけで switch では使えません。               

<continue>
#include<stdio.h>
main()
{
    int i,a;
    a=1;
    for(i=0;i<3;i++)
    {
        printf("continue前 a=%d\n",a);
        continue;  /* ここで次のループを開始させる。これ以降のループは実行されない */
        a+=1;       /* += がわからない方はこちら */
        printf("continue後 a=%d\n",a);   /* 実行されないはずのプログラム */
    }
}
<実行結果>
continue前 a=1
continue前 a=1
continue前 a=1

<実行結果>のように、continue の後に書いた処理は行われません。

<前に戻る  |目次|  次へ進む>