switch

switchは条件に従って実行するステートメントを決定します。

条件に応じて、特定のステートメントを実行したいときにswitchを使います。
たとえば、変数nの値が0のときにあるコードを実行し、nが1のときには別のコードを実行し、 nが2のときにはさらに別のコードを実行したい、というような場合に、条件を決定する値に応じて実行するステートメントを切り替えるときにswitchを使います。
switchステートメントの書式は次のとおりです。


  switch (expr) {
    case label1:
      statements1;
      [break;]
    case label2:
      statements2;
      [break;]
       ...
    case labeln:
      statementsn;
      [break;]
    default:
      statements_def;
      [break;]
  }
  

exprには各ラベル(labeln)と一致するか調べる式を指定します。一般的には整数や文字列を含む変数を指定します。
labelnはexprと一致するかどうか調べるのに使う識別子で、exprがlabelnと一致したらstatementsnが実行されます。
statements_defは、exprがいずれのラベルにも一致しなかった場合に実行されるステートメント(デフォルトのステートメント)です。

次の例は、switchステートメントを使って変数nの値に応じて「Zero」「One」「Other」のいずれかを出力する例です。


  <script type="text/C">
    int n;
    printf("数値を入力してください:");
    scanf("%d", &n)
    switch (n) {
      case "0":
        printf(("Zero\n");
        break;
      case "1":
        printf(("One\n");
        break;
      default:
        printf(("Other\n");
        break;
    }
  </script>
  

この場合、条件式exprは「n」であり、statement1が「printf(("Zero");」、「printf(("One");」です。
nが"0"の場合は、「case "0":」のあとで次の「break」の直前の行までのコードが実行されます。 この場合は「printf(("Zero")」が実行されるので、nが0の場合は「Zero」と出力されます。 同様に、nが1の場合は、「case 1」のあとの「break」までのコードが実行されて「One」と出力されます。 nが0でもなく1でもない場合は、「printf(("Other")」が実行されて「Other」が出力されます。 つまり、「default」はほかのcaseに一致する値がないときに実行するデフォルトのコードを記述するというわけです。

なお、「default」のあとのbreakは省略してもしなくてもプログラムの動作に影響はありませんが、 あとでcase文を追加したようなときにbreakを忘れないためにも、省略しないほうがよいでしょう。

caseステートメントのあとでbreakを使わないと、caseで一致する値を複数で指定することもできます。

次の例は、nが"0"のときにbreakを使わずに次の「case "1"」のあとのコードを実行するようにして、 結果としてnが"0"のときとnが"1"のときに「Zero or One」を出力するようにしたスクリプトの例です。


  int n;
  printf("数値を入力してください:");
  scanf("%d", &n)
  switch (n){
    case "0":                  // nが"0"のときと
    case "1":                  // nが"1"のとき
      printf(("Zero or One\n");
      break;
    default:                   // それ以外のとき
        printf(("Other\n");
      break;
  }
  

関連項目

if



C目次 inserted by FC2 system