switch の書き方

条件文は、if だけでなく switch という書き方があります。

switch( 条件判定する変数 )
{
  case 定数1:
  //----- ここに定数1の時の処理を書く
  break;
  case 定数2:
  //----- ここに定数2の時の処理を書く
  break;
  default:
  //----- 上のいずれにも当てはまらない時
  break;
}

スポンサーリンク

サンプルプログラム

ソースファイル名:main.c

実行方法

上のソースを書き写して実行してください。
a の数字を変えることで通過する case 文が変わります。
その違いをみてください。

switch と if の違いとは

switch 文は、ある変数が特定の値になった時の条件分岐ににつかいます。
if と似ていますが、厳密には少し違います。

まず、case 文の書き方なのですが、

case 定数:

と書きます。定数の後ろは ":" です。注意してください。

case 0:

なのですが、この case 0 は if でいう

if( a == 0 )

の赤字部分、a == 0 に当たります。 "a が 0 なら" と解釈して大丈夫です。

case a < 4:
case a:

のように、条件を範囲指定をすることや、変数を条件にすることはできません。
必ず定数で指定する必要があります。 これが if との大きな違いです。

case で一致した時の制御は、case 以降に書くのですが、この時に { } は必要ありません。
今回の例では、

printf( "case = 0 を通過しました。¥n" );

と記述していますが、{}は付けなくても大丈夫です。 ただ、制御文の終了の判定が必要になるので、制御文の最後は

break;

で閉じるようにします。
これを書く事で、default の下まで一気にジャンプしてくれます。

break を書き忘れたらどうなるの?

では、break を書き忘れてしまったらどうなるでしょうか? 実際にサンプルプログラムの全ての break を消して実行してみてください。

サンプルプログラムでは、a = 2 なので、

case = 2 を通過しました。
a= 2 default を通過しました。

と出力されるはずです。

case == 2 の段階で break が見つからなかったので、その先の default の処理までしてしまいます。

break を書き忘れた時はその下の命令まで実行する事も if との大きな違いです。
if の場合、

if( i == 0 )
{
  //---- i = 0の時の処理
}
else if( i == 1 )
{
  //---- i = 1の時の処理
}

この書き方をしている限りは、i == 0 の時と i == 1 の処理を同時にやることはありません。
しかし、switch は break を入れ忘れると、その下までどんどん処理をしてしまうのです。
break の書き忘れには注意してください。

スポンサーリンク