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;
}