バイオインフォ道場、くまぞうです。
switch文は、条件に「一致したかどうか」という判断に基づいて、実行するコマンドを変更したりするときに使います。if文と異なり、複数の条件と対応した処理をまとめて記述できるので便利です。if文を使って同じことができますが、よりシンプルに記述できて、プログラムの見通しも良くなります。
switch文による条件判断
swtch文の書き方
switch文では、式に対する複数の条件(定数)を判断することができます。上から順に判定されます。条件を増やしたい時は「case」を追加します。続けて、条件に合致した場合の処理を書きます。このとき、「break」を指定されたところまでが実行範囲です。もし「break」を書き忘れると、続く「case」の処理まで実行されてしまいます。「その他の条件」は、「default」で指定することができます。
switch文の一般的な形式
switch (式) { case 定数1: 対応した文 ... break; case 定数2: 対応した文 ... break; default: 対応した文 ... }
switch文の判断
switch文で与えられた式を評価し、caseラベルの1つに処理を分岐させます。ラベルには、整数・文字型・列挙型を指定します。
プログラム
test_switch.c
#include<stdio.h> void main(void) { printf("input A? B?:"); int k; k = getchar(); switch (k) { case 'A': printf("catch A\n"); break; case 'B': printf("catch B\n"); break; default: printf("error\n"); } }
test_switch2.c
#include<stdio.h> void main(void) { printf("input A? B?:"); int k; k = getchar(); switch (k) { case 'A': printf("hello\n"); case 'B': printf("catch %c\n", k); break; default: printf("error\n"); } }
プログラム実行
test_switch
$ gcc test_switch.c -o test_switch $ chmod +x test_switch
$ ./test_switch input A? B?:A <-Aを入力 catch A
test_switch2
$ gcc test_switch2.c -o test_switch2 $ chmod +x test_switch2
$ ./test_switch2 input A? B?:A <-Aを入力 hello catch A
$ ./test_switch2 input A? B?:B <-Bを入力 catch B
プログラムについて
test_switch.cでは、switchの条件を数種類ためしてみました。標準入力用getcharを使って、キーボードから入力された1文字を判断します。「変数k」が「A」または「B」のとき、それぞれの処理として記述された「catch A」「catch B」を出力します。test_switch2.cは、処理は大体同じです。変更点は、case内の処理がほぼ同じなので、「break」を省いて「catch」の表示処理を共通にしたところです。また、「A」が入力されたときだけ「hello」を表示させています。分岐と共通を使い分けました。
条件分岐処理には「if」もありますが、複数の分岐条件が想定されている場合は「switch」を使ったほうが、シンプルに記述することができると思います。