2 switch

プログラム中で,「もしa=1ならば○○する,a=2ならば△△する,a=5な らば□□する,さもなければ◎◎する」というような処理をしたい場合,switchと いう命令を使う.このように,値により処理が複数に分岐することを多分岐と言う.条件 の部分が整数(int),あるいは文字(char)で表される場合,switchを使う.

2.1 プログラム例

リスト1switch文を使った例を示す.その動作は,以下のと おりである.
  1. 「あなたは何年生ですか?」と質問を行い,ユーザーはそれに答える.答えた結果 は,変数yearに格納する.
  2. 変数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 }

2.2 switchの書き方

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文を使った構文.多くの選択肢がある場合.
\includegraphics[keepaspectratio, scale=1.0]{figure/switch.eps}



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成18年7月19日


no counter