switch文は、条件で実行するgoto文の集まりと同等の処理です。 以下で、それを示すプログラムを示します。 これは、opの整数データによって複数の処理に分岐するプログラムです。
#include <stdio.h>
#include <stdlib.h>
main()
{
char op;
int d1, d2, result;
printf("式入力>");
scanf(" %d %c %d", &d1, &op, &d2);
if(op == '+') goto L1;
if(op == ',') goto L2;
if(op == '-') goto L3;
if(op == '*') goto L4;
goto L_default;
L1:
L2:
result = d1 + d2;
goto L_break;
L3:
result = d1 - d2;
goto L_break;
L4:
result = d1 * d2;
goto L_break;
L_default:
printf("入力エラー\n");
exit(1);/* プログラム終了 */
L_break:
printf(" =%d\n", result);
}
式入力>10 + 4 =14 |
式入力>10 , 4 =14 |
式入力>10 - 4 =6 |
式入力>10 * 4 =40 |
式入力>10 / 4 入力エラー |
上記のプログラムとまったく同じプログラムを、switch文で以下に示します。
switch(整数になる式) { } は、
カッコの中の整数になる式の
結果と一致するcaseのところに、処理が移動します。
その後は、breakがあるところまで、順番に実行します。breakに達した時点で、
switchの処理が終わり、次の処理へ進みます。
case と : 間では、整数定数だけの式を書きます。
以下の例で、opが、'*'であれば、case '*':の
result = d1 * d2;の処理へ移動します。
#include <stdio.h>
#include <stdlib.h>
main()
{
char op;
int d1, d2, result;
printf("式入力>");
scanf(" %d %c %d", &d1, &op, &d2);
switch(op){ /* op の内容と一致する case のところに移動します。 */
case '+': /* breakがないと、そのまま、上から下へ順番に実行する */
case ',':
result = d1 + d2;
break; /* breakがないと、そのまま、上から下へ順番に実行する */
case '-':
result = d1 - d2;
break;
case '*':
result = d1 * d2;
break;
default: /* opが、'+'でも','でも'-'でも'*'ない時に実行が移るところ */
printf("入力エラー\n");
exit(1);/* プログラム終了 */
}
printf(" =%d\n", result);
}
参考に、通常のif文で作成したプログラムを以下に示します。
#include <stdio.h>
#include <stdlib.h>
main()
{
char op;
int d1, d2, result;
printf("式入力>");
scanf(" %d %c %d", &d1, &op, &d2);
if(op == '+' || op == ','){
result = d1 + d2;
} else if( op == '-'){
result = d1 - d2;
} else if( op == '*'){
result = d1 * d2;
} else {
printf("入力エラー\n");
exit(1);/* プログラム終了 */
}
printf(" =%d\n", result);
}