分岐文
前回<C言語 演算子 【基礎 第8回】>までのところでIF文などの条件式で使用する演算子について述べました。
今回はもう一つの分岐文であるswitch文を取り上げたいと思います。
switch文の構造
switch文は条件式の値によって処理を複数に分けるものとなります。
switch文の書式は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 | switch (条件式){ case 定数1: 文1 break ; case 定数2: 文2 break ; 複数の case : default : 文3 } |
switch文とif文との違いは、条件式の結果が整数値にならないといけないことです。
まず式の評価して、その結果の整数値に一致するcase定数式の処理が行われます。
caseの定数式は他のcaseとかぶってはいけません。
caseの内部の処理はbreak文まで処理が行われます。break文に当たるとそこで処理が終わり
switch文が終了します。
break文は必須ではありませんがbreak文がなかった場合、そのまま下のcaseの処理まで実行されることになります。
どのcaseにも当てはまらない場合、最後のdefault文のところの処理が行われることになります。
default文は省略することができます。
コードで確認
Switch文を使用してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> int main(void){ int a = 10; switch ( a ){ case 10: printf(“一つ目の処理をしていますn”); break ; case 20: printf(“二つ目の処理をしていますn”); break ; default : printf(“ default の処理をしてますn”); } return (0); } |
~~~~実行結果~~~~
一つ目の処理をしています
~~~~~~~~~~~~
先ほどのページのコードを見てみます。
青枠の部分がswitch文になります。switch文の最初のところでは変数aを評価しています。
変数aは値が10になっているので評価の結果最初のcaseのところに処理が飛びます。
このswitch文はIf文を使用して以下のように書き換えが可能です。
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h> int main(void){ if (a == 10){ printf( "一つ目の処理をしています。n" ); } else if (a == 20){ printf( "二つ目の処理をしていますn" ); } else { printf( "defaultの処理をしていますn" ); } return (0); } |
今回のswitch文で7行目の「break」をコメントアウトすると次のような実行結果となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> int main(void){ int a = 10; switch ( a ){ case 10: printf(“一つ目の処理をしていますn”); case 20: printf(“二つ目の処理をしていますn”); break ; default : printf(“ default の処理をしてますn”); } return (0); } |
~~~~実行結果~~~~
一つ目の処理をしています
二つ目の処理をしています
~~~~~~~~~~~~
「case 10:」のところに処理は飛びますがbreakがないため、そのまま下の処理まで進みます。
そのため2つ表示される形となります。
これもifで書いてみましょう
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main(void){ if (a == 10){ printf( "一つ目の処理をしています。n" ); printf( "二つ目の処理をしていますn" ); } else if (a == 20){ printf( "二つ目の処理をしていますn" ); } else { printf( "defaultの処理をしていますn" ); } return (0); } |
変数aの値を100に変更すると次のような結果となります。
~~~~実行結果~~~~
defaultの処理をしています
~~~~~~~~~~~~
このようにswitch文はif文でも書き換えが可能となっていますが、switchでは定数となるものでしか分岐ができませんので
if文のような条件式は使用できません。
実践力が身につくC言語講座 連載リンク
競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載
アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載
パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載