C言語 switch 分岐処理 スクリプトの書き方

バイオインフォ道場、くまぞうです。

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」を使ったほうが、シンプルに記述することができると思います。

スポンサーリンク