Tips

C言語 分岐文 switch 【基礎 第9回】

分岐文

前回<C言語 演算子 【基礎 第8回】>までのところでIF文などの条件式で使用する演算子について述べました。
今回はもう一つの分岐文であるswitch文を取り上げたいと思います。

switch文の構造

switch文は条件式の値によって処理を複数に分けるものとなります。
switch文の書式は以下のようになります。

switch(条件式){
	case 定数1:
		文1
		break;
	case 定数2:
		文2
		break;
	複数のcase :
	default:
		文3
}

switch文とif文との違いは、条件式の結果が整数値にならないといけないことです。
まず式の評価して、その結果の整数値に一致するcase定数式の処理が行われます。
caseの定数式は他のcaseとかぶってはいけません。
caseの内部の処理はbreak文まで処理が行われます。break文に当たるとそこで処理が終わり
switch文が終了します。
break文は必須ではありませんがbreak文がなかった場合、そのまま下のcaseの処理まで実行されることになります。

どのcaseにも当てはまらない場合、最後のdefault文のところの処理が行われることになります。
default文は省略することができます。

コードで確認

Switch文を使用してみましょう。

#include <stdio.h>
int main(void){
	int a = 10;
	switch( a ){
		case 10:
			printf(“一つ目の処理をしていますn”);
			break;
		case 20:
			 printf(“二つ目の処理をしていますn”);
			break;
		default:
			printf(“defaultの処理をしてますn”);
	}
	return (0);
}

~~~~実行結果~~~~
一つ目の処理をしています
~~~~~~~~~~~~

先ほどのページのコードを見てみます。
青枠の部分がswitch文になります。switch文の最初のところでは変数aを評価しています。
変数aは値が10になっているので評価の結果最初のcaseのところに処理が飛びます。

このswitch文はIf文を使用して以下のように書き換えが可能です。

#include <stdio.h>
int main(void){
    if(a == 10){
        printf("一つ目の処理をしています。n");
    }else if(a == 20){
        printf("二つ目の処理をしていますn");
    }else{
        printf("defaultの処理をしていますn");
    }
    return (0);
}

今回のswitch文で7行目の「break」をコメントアウトすると次のような実行結果となります。

#include <stdio.h>
int main(void){
	int a = 10;
	switch( a ){
		case 10:
			printf(“一つ目の処理をしていますn”);
		case 20:
			 printf(“二つ目の処理をしていますn”);
			break;
		default:
			printf(“defaultの処理をしてますn”);
	}
	return (0);
}

~~~~実行結果~~~~
一つ目の処理をしています
二つ目の処理をしています
~~~~~~~~~~~~

「case 10:」のところに処理は飛びますがbreakがないため、そのまま下の処理まで進みます。
そのため2つ表示される形となります。
これもifで書いてみましょう

#include <stdio.h>
int main(void){
    if(a == 10){
        printf("一つ目の処理をしています。n");
        printf("二つ目の処理をしていますn");
    }else if(a == 20){
        printf("二つ目の処理をしていますn");
    }else{
        printf("defaultの処理をしていますn");
    }
    return (0);
}

変数aの値を100に変更すると次のような結果となります。

~~~~実行結果~~~~
defaultの処理をしています
~~~~~~~~~~~~

このようにswitch文はif文でも書き換えが可能となっていますが、switchでは定数となるものでしか分岐ができませんので
if文のような条件式は使用できません。

実践力が身につくC言語講座 連載リンク

競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載

アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載

パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載

Recent News

Recent Tips

Tag Search