switch文


条件によって実行する処理が異なる場合if文を使いました。しかし場合分けする条件が多数ある場合、if文では複雑になってしまうことがよくあります。

では、サンプルを見てみましょう。

ソースコード

源文件
  1|/* switch01.c */                                                            
  2|
  3|#include <stdio.h>
  4|
  5|int main(void)
  6|{
  7|  int n;
  8|  printf("1〜5までの整数をインプットして下さい。 == ");
  9|  scanf("%d", &n);
 10|
 11|  switch(n){
 12|  case 1:
 13|    printf("one, 一, 壱\n");
 14|    break;
 15|  case 2:
 16|    printf("two, 二, 弐\n");
 17|    break;
 18|  case 3:
 19|    printf("three, 三, 参\n");
 20|    break;
 21|  case 4:
 22|    printf("four, 四, 師\n");
 23|    break;
 24|  case 5:
 25|    printf("five, 五, 伍\n");                                               
 26|    break;
 27|  default:
 28|    printf("インプットが間違いました。\n");
 29|    break;
 30|  }
 31|  return 0;
 32|}

実行結果

1〜5までの整数をインプットして下さい。 == 4
four, 四, 師

nが1であるとすると、まず文1が実行されます。しかし、break文がないので、switch文を抜けずに、次の文2が実行されます。さらに、文3も実行てしまいます。これでは、何か何だが分からなくなります。しかし、この性質を逆手にとったプログラムも可能です。nが1のときも2のときも同じ処理をする場合はどうでしょうか。

nが1であっても2であっても処理1が実行されます。ユーザーからアルファベットを1文字入力してもらい、この文字により処理を変える場合を考えます。Aと入力をした場合にある処理をするとします。ユーザーが小文字のaを入力してもAのときと同じ処理をさせたほうが親切ですね。



ソースコード

源文件
  1|/* switch02.c */
  2|
  3|#include <stdio.h> 
  4|
  5|int main(void)
  6|{
  7|  int c;
  8|  int end = 0;
  9|
 10|  while(1){
 11|    printf("***** MENU *****\n");
 12|    printf("A : Game\n");
 13|    printf("B : Music\n");
 14|    printf("C : Office\n");
 15|    printf("X : End\n");
 16|    printf("****************\n");
 17|    printf("------>\n");
 18|
 19|  while(1){
 20|    c = getchar();
 21|    if(c != '\n'){
 22|      break;
 23|    }
 24|  }
 25|
 26|  switch(c){
 27|  case 'A':
 28|  case 'a':
 29|    printf("\nゲームはインストールされていません。\n\n");
 30|    break;
 31|  case 'B':
 32|  case 'b':                                                                 
 33|    printf("\nInput the Music CD, please.\n\n");
 34|    break;
 35|  case 'C':
 36|  case 'c':
 37|    printf("\nHaHaHa\n\n");
 38|    break;
 39|  case 'X':
 40|  case 'x':
 41|    end = 1;
 42|    break;
 43|  default:
 44|    printf("\n不正な入力です。\n\n");
 45|    break;
 46|  }
 47|  if (end == 1)
 48|    break;
 49|  }
 50|  printf("\n*** End ***\n");
 51|  return 0;                                                                 
 52|}

実行結果

***** MENU *****
A : Game
B : Music
C : Office
X : End
****************
------>
a

ゲームはインストールされていません。

***** MENU *****
A : Game
B : Music
C : Office
X : End
****************
------>
x

*** End ***


19 ~ 24行目に注目して下さい。ユーザーがAキーを押してEnterキーを押すと、入力バッファには'A'と'\n'が蓄えられると書きました。そこで、cが'\n'でなくなるまで getchar 関数を呼んでいます。c が'\n' でなくなったらループを抜けて次の処理に移ります。

なお、c = getchar(); の c は int 型の変数です。

Chapter4 @ C言語目録 @ HomeWork List @ 昭亮's Homepage