こんなお悩みにお答えします。
記事の内容
- switch, case, break, defaultの使い方
- ifとの違い、使い分け
switch・case・breakで複数条件分岐する方法
switchを使うとif文のように条件によって処理を分けることができます。
例:
#include <stdio.h> void main() { int num=1; switch(num) //numの値によって処理を変える { case 0: //numが0かチェック、0でないので次のcase文へ printf("num is 0\n"); //実行されない break; //実行されない case 1: //numが1かチェック、1なので以下の処理を実行 printf("num is 1\n"); //実行 break; //switch文から抜ける //以下はすべて無視される case 2: printf("num is 2\n"); break; default: printf("num is not 0,1,2\n"); break; } }
実行結果
num is 1
「switch(num)」はnumの値によって処理を変えるよという宣言です。
分岐の条件は{ }内に書きます。「case 0:」はnumが0ならば処理を行うという意味です。例ではnum=1なので直後のprintfとbreakは飛ばして次のcase文に行きます。
「case 1:」はnumが1なら処理を行うという意味なので、直後にある「printf("num is 1\n");」と「break;」が実行されます。「break;」はswitch文から抜けるという命令なので「case 2:」以下はすべて無視されます。
どのcase文にも当てはまらなかった場合は「break;」で抜けないので「default:」以下の処理が実行されます。逆に「break;」が書かれていなければ必ず「default:」以下の処理は実行されます。
switchの使い方
switch(変数) { case 値1: 処理(変数が値1に等しい場合に実行) break; case 値2: 処理(変数が値2に等しい場合に実行) break; default: 処理(上にbreakがなければ実行) break; }
- case文はいくつ連ねてもOK
- default文は無くてもOK
- breakは無くてもOK(switch文を抜けてほしいタイミングで付ける)
breakは無くてもOKですが、必要なのに書き忘れるのには注意です。(よくあるミスです)
switchとifの違いと使い分け方法
ifの方ができることが多いのでよく使いがちですが、場合によってはswitchの方が適しています。
ifの使い方はこちら
-
【C言語】if・else文で複数条件分岐する方法と条件式の書き方
if・else分を使うと複数の条件によって処理を分岐できます。 記事の内容 if・else文を用いた複数条件の分岐 処理が1つの時の省略した書き方 入れ子(ネスト)構造 条件式の書き方と演算子(等号・ ...
続きを見る
ifとswitchの違い
違う点 | switch | if |
条件分けできる変数の数 | 1つ 例:switch(a) |
1つでも複数でも可 例:if(a==0 || b==0) |
条件の内容 | 1つの値 例:case 1: |
範囲指定も値指定も可 例:if(a>0), if(a==0) |
switch/if文を抜けるタイミングの制御 | break文で可能 | 不可 |
コードの見やすさ | 見やすい | switchよりは見にくい |
switchが有用な場面
switchはifより制約が多いですが、switchで書ける条件下ではswitchを使った方がコードが見やすくなります。
例:
#include <stdio.h> void main() { int num=1; switch(num) { case 0: printf("num is 0\n"); break; case 1: printf("num is 1\n"); break; case 2: printf("num is 2\n"); break; default: printf("num is not 0~3\n"); break; } //同じ処理をif文で書いた場合 if(num==0) { printf("num is 0\n"); } else if(num==1) { printf("num is 1\n"); } else if(num==2) { printf("num is 2\n"); } else { printf("num is not 0~3\n"); } }
実行結果
num is 1
num is 1
switch文が見やすい理由はコードがシンプルに書けるからと、値分けしていることが明確だからです。
if文ではif(num!=3)のような文も書けるので演算子をちゃんと確認しなくてはいけません。一方でswitchはどんな数値に分けているのかだけを確認すればOKです。演算子まで確認しなくていいので読むのが若干楽です。
まとめ:見やすいコードを書くために
プログラムは書いて終わりではありません。未来の自分や別の人が修正したり、似たコードを書く時の参考にしたりします。そんなときに見やすいコードだと作業時間を削減できてありがたがられます。逆に見にくいコードだとイラっとします(笑)
switchで書ける文のほとんどはif文でも書けてしまいますが、より見やすいコードを書くために有用です。ぜひ使ってみてください。