プログラム中で,「もし
a=1ならば○○する,
a=2ならば△△する,
a=5な
らば□□する,さもなければ◎◎する」というような処理をしたい場合,
switchと
いう命令を使う.このように,値により処理が複数に分岐することを多分岐と言う.条件
の部分が整数(
int),あるいは文字(
char)で表される場合,
switchを使う.
リスト
1に
switch文を使った例を示す.その動作は,以下のと
おりである.
- 「あなたは何年生ですか?」と質問を行い,ユーザーはそれに答える.答えた結果
は,変数yearに格納する.
- 変数yearの値に従い,以下の動作をする.
- yearが1の場合「高専の生活にも慣れ,少し余裕ができる.」
と表示する.
- yearが2の場合「留年しなかったので,油断する.」と表示す
る.
- yearが3の場合「レポートがきついが,要領を憶える.」と表示する.
- yearが4の場合「専門科目が多く,たいへんきつい.」と表示する.
- yearが5の場合「進路も決まり,ほっと一息.」と表示する.
- yearが1-5以外の場合「?年生はありません!」と表示する.
このような構文は,先週,学習したif文を使っても可能であるが,わかり難いプロ
グラムになる.switch文を使う方が簡単である.
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int year;
6
7 printf("あなたは何年生ですか?\t");
8 scanf("%d",&year);
9
10 switch(year)
11 {
12 case 1:
13 printf("高専の生活にも慣れ,少し余裕ができる.\n");
14 break;
15 case 2:
16 printf("留年しなかったので,油断する.\n");
17 break;
18 case 3:
19 printf("レポートがきついが,要領を憶える.\n");
20 break;
21 case 4:
22 printf("専門科目が多く,たいへんきつい.\n");
23 break;
24 case 5:
25 printf("進路も決まり,ほっと一息.\n");
26 break;
27 default:
28 printf("%d年生はありません!\n",year);
29 break;
30 }
31
32 return 0;
33 }
if文は,選択肢が少ない場合,わかりやすい記述ができる.しかし,選択肢が多く
なると,記述は複雑になり,分かりにくいプログラムとなる.そのような場合は,
if文の代わりに
switch文を使う.
switch文を使った多分岐の書式は,次のとお
りである.マッチした定数式の部分から実行される.
|
書式
switch(式){
case 定数式1:
文1;
文2;
break;
case 定数式2:
文1;
文2;
break;
case 定数式3:
文1;
文2;
break;
default:
文7;
文8;
break;
}
|
式や定数式の値の型は,
intまたは
charでなくてはならない
3.とくに,定数式は,コンパイル時に,値が評価
できなくてはならない.
caseの後の定数式は,ラベルと呼ばれるものである.ラベ
ルの後は,コロン(
:)をつける.文の終わりを示すセミコロン(
;)ではない.実
行する文の集まりの最後には,
bread文を書く.この
break 文が無
いと,マッチしたラベル以降の全ての文が実行される.コードブロックを表す中括
弧
{ } が無いので,
break文で
switch文の終わりを示す最後の中括弧
}から抜け出す.
この構文のフローチャートを,図1に示す.これは,式の値により,それ
にマッチしたブロック4
が実行される.もし,どれもマッチしなければ,defaultが実行される.
default文は無くてもよいが,その場合はどのブロックも実行されない場合がある.
図 1:
switch文を使った構文.多くの選択肢がある場合.
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成18年7月19日