if文と少し違った条件分岐の機能を持つ『switch文』とは…?
else ifをたくさん書くがめんどくさい!
前回は『if』『else』『else if』を使った基本的な条件分岐のやり方をマスターしました。

これらの条件分岐は使い方が簡単なので、とっても便利なのですが…
条件分岐が5個を超えはじめると、書くのがしんどいですよね…?
そんなときに役に立つのが今回ご紹介する『switch文』です。
分岐する条件がたくさんある場合は、switch文のほうがif文よりスッキリしたコードになるので、ぜひ使ってみてください!
気になるところへGO!
複数の条件分岐を綺麗にまとめるswitch文とは…?

今回ご紹介する『switch文』は、『==』を使った条件分岐をシンプルにまとめる方法です。
switch文を使うと『num==1』などの条件式を何度も書く必要がなくなるので、スッキリと読みやすいコードにすることができます。
switch文を使うには、次のようなコードを書けばOKです。

switch文の動き方や使い方はプログラムを見たほうがわかりやすいので、まずは例を見てみましょう。
// 入力された数値が1 or 2 or それ以外を判別する
#include<stdio.h>
int main(void) {
// 説明を表示して数値の入力を受け付ける
int num;
printf("1か2を入力してください→");
scanf("%d", &num);
// 入力された数値によって動作を分ける
switch (num) {
case 1: // 1が入力されたとき
printf("One\n");
break;
case 2: // 2が入力されたとき
printf("Two\n");
break;
default: // それ以外が入力されたとき
printf("クソが!\n");
break;
}
return 0;
}
このプログラムは入力された数値が『1』or『2』or『それ以外』であることを判別するプログラムになります。
ぜひこのプログラムを2回実行してみてください。
『1か2を入力してください→』と表示されたら、1回目は『1』を、2回目は『2』を入力してみましょう。
このようにswitchを使うことで、『指定した数値 or それ以外』で動作を変えることができます。
特に注目すべきポイントは、『case 2:』という部分です。
後ほど詳しく解説いたしますが、この部分は『num==2』という条件を意味しています。
if文だと『1 or それ以外』しか判別できなかったのですが、switch文なら『1以外の値』で分岐させることができるのです。
switch文とcase・defaultの使い方

続いては、switch文の使い方をご説明していきます。
先程ご紹介したswitch文の使い方をもう一度ご覧ください。

まずは①『switch(条件)』という部分です。
この『(条件)』の部分には『変数』や『変数を使った計算式』を書きます。
先程のプログラムの例では、『switch(num)』と書くことで、変数numの値によって動作を分けていたのです。
なお、条件の部分にはif文で使った条件式を書くこともできます。
しかし、switchでは条件式を使うことはありません。
『1 or 0』しか出力できない条件式を使ってしまうと、『1以外で条件分岐ができる』というswitch文のメリットがなくなってしまうからです。
次は②『case 値:』の部分に関してです。
この『値』の部分には『動作を変えたいときの条件の値』を記入します。
例えば『case 2:』と書いた場合、条件に書いた変数が『2』になったときに動作を変えることができるのです。
このように、switch文は『(条件)に書いた変数』が『caseの後に書いた値』と一致したときに分岐します。
そして、当てはまったcaseの直後に書いた③の処理が実行されるのです。
先程のプログラムの例であれば、numが1になると直後に書かれた『printf (“One\n”);』が実行されて『One』が表示されるイメージになります。
numが2になった場合も同様に、『printf(“Two\n”);』が実行されるのです。
このように複数のcaseと処理を書いていくだけで、たくさんの条件分岐をシンプルにまとめることができます。
条件には変数を使っているので、変数がcaseの値に一致しないときもあるでしょう。
その時は④の『default』が発動します。
『default』は『else』と同じような機能を持っているので、条件に当てはまらなかったときはdefaultの後に書いた処理が実行されるのです。
- switch文の条件には変数を書く
- 分岐させたいときの値を『case 値:』で書く
- caseに当てはまるとその直後に書いた処理が実行される
- caseに当てはまらない時はdefaultの処理が発動する
switch文で重要な『break』

さきほどのswitch文の使い方に『break;』というコードがあったと思います。
この『break』は今のブロック文の処理を終了させるコードです。
『{ }』に挟まれているコードのことをブロック文と言います。
『クソが!』と表示する先ほどのプログラムの場合、オレンジ色の箇所がブロック文です。

switch文を使うと、switch文全体がブロック文になっていることがお分かりだと思います。
『break』はブロック文を終了させるコードなので、switch文の途中でbreakが発動すると、switch文自体が終わることになるのです。
先ほどのプログラムで『1』を入力したときに、『case 1』の処理である『printf(“One\n”);』のコードが実行されたことを確認したと思います。
そのあとに『break;』が発動し、switch文が終了したのです。
その結果、『Case 2:』をチェックすることなく、ブロック文の後の『return 0;』が実行されることになりました。
switch文を使うときは、処理の最後にbreakを必ず書くようにしてください。
というのも、breakを書き忘れるとswitch文の本当の能力が発動してしまうからです。
本当の能力が発動する条件分岐として使えなくなってしまいます。
プログラム言語によっては、breakを忘れるとエラーになるものもあるので、breakを毎回つける習慣を身につけるのがオススメです。

まとめ
以上がもう1つの条件分岐である『switch』の使い方になります。
switch文を使えば、たくさんの条件分岐をスッキリさせることができますので、ぜひ使ってみてください!
