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