5.3 switch case 文

たとえば変数 a の値が 0, 1, 2, それ以外だった場合、それに応じて出力するメッセージを変えたい場合、switch 文を使ってこう書くことができます。

  switch( a ) {
  case 0:
    printf("グー\n");
    break;
  case 1:
    printf("チョキ\n");
    break;
  case 2:
    printf("パー\n");
    break;
  default:
    printf("反則\n");
  }

switch に続く ( ) に判定に用いる変数や演算式を書き、{ } に囲まれたなかに列挙する case の後に書いた値(変数や演算式は使えません)と等しいかどうかで条件判定が行われます。

等しかった場合はその case の後の行から処理をはじめ、break があると switch 文を抜けて終わりの } の次の行に処理を移します。
等しくなかった場合は次の case 句の判定を行います。
そうやって判定が最後まで成立しなかった場合は default 句の後の行から処理をはじめます。default 句は省略可能で、省略した場合にいずれの case にも該当しなかった場合は何もせず switch 文の { } ブロックの次の行に処理を移します。

switch 文

switch 文による処理の分岐

注意するべきは case 句の終わりを意味する break で、これがないと処理は次の case 句の中に食い込んでしまいます。例えば case 0: の break が無かった場合には、printf("グー\n"); を実行したあと、switch 文から抜けずに case 1: の printf("チョキ\n"); の処理をはじめてしまいます。case 句にはそれぞれ終わりはなく、単純に break に遭遇するまで次々と処理を下に向かって行うようにできています。
default 句の最後にも break を書いて構いませんが、あってもなくても switch から出ていくことには違いがないので、書く必要はありません。


Yutaka Yasuda (yasuda@cc.kyoto-su.ac.jp)