switch(){ } の文

switch文と同じ処理をgoto文で作る例

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文で以下に示します。
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);
}