switch 文・break 文

switch 文・break 文

一つのスイッチとなる変数により複数の処理へ流れを制御する方法。
サイト全体の目次

稿


稿

switch 文・break 文

このセクションのソース

/*01*/ #include <stdio.h>
/*02*/ 
/*03*/ main()
/*04*/ {
/*05*/   int sw;
/*06*/ 
/*07*/   printf("C言語は難しいですか?\n");
/*08*/   printf("(番号を選んでください。)\n");
/*09*/   printf("1:簡単  2:難しい  3:混乱  -> ");
/*10*/   scanf("%d", &sw);
/*11*/ 
/*12*/   switch(sw){
/*13*/     case 1:
/*14*/       printf("どんどん先に進みましょう。\n");
/*15*/       break;
/*16*/     case 2:
/*17*/       printf("ゆっくりやれば大丈夫ですよ。\n");
/*18*/       printf("がんばってください。\n");
/*19*/       break;
/*20*/     case 3:
/*21*/       printf("一息入れて、復習してみては?\n");
/*22*/       break;
/*23*/     default:
/*24*/       printf("正しい番号を選んでください。\n");
/*25*/   }
/*26*/ 
/*27*/   return 0;
/*28*/ }

list-2.2.1-12

switch文はスイッチによって分岐する処理機構です。何がスイッチになるかといえば、変数がスイッチになります。変数には好きな値を入れることができます。その性質を利用して、変数の値によって処理を分岐させるのです。

switch の後の「 ( ) 」内に変数「sw」が入っています。これがスイッチになります。そして、このスイッチの値によって switch 文以下の「case 値:」の実行文を実行します。つまり、分岐先はスイッチ用の変数の値と、「case 値:」の値が一致したところです。上の例では「sw」が「1」なら、「case 1:」以下の文を、「sw」が「2」なら、「case 2:」以下の文を実行します。ですから、「case 値:」の順番は1から順に並んでいなくても、その値が飛び飛びでもかまいません。そして、最後に「default:」という処理を書きます。これは、いずれの「case 値:」にもあたらなかった時に実行されます。「default:」以下は省略可能してもかまいません。上の例では、想定外の値(1,2,3以外)を入力された時の処理に使っています。「case 値:」の区切りが「;」ではないこと、case ごとの実行文が「 { } 」でくくられていないことに注意してください。なお、「~ :」の形のものをラベル(名札)といいます。

list-2.2.1-15

break文は現在の swhitch 文から1つ外へ抜け出すために使う文です。「1つ」といったのは、前回の if 文でも書きましたが、文が「ネスト」している時は、一番外へ抜けるのではなく、「1つ」外へ抜けるという事です。ただし、break 文の対象は switch 文とこれから出てくる for 文、while 文が対象で、それ以外の if 文などは対象外です。この辺のことはちょっと注意が必要なので後ほど書く章を参考にして下さい。

この break 文がなぜ switch 文に必要かというと、swhitch 文は一致するラベルに処理を移すだけであるからです。つまり、この break 文が無いとそれ以下の「case 値:」もすべて実行されてしまうのです。例えば処理が「case 2:」に移ったとすれば「case 3:」も「default:」も実行されてしまうのです。そのために break 文を使って switch 文から抜け出す必要があるわけです。

練習問題

問題-2.2.1

生まれた年(西暦)を入力すると、その年の干支が出るようにしてください。ただし if 文を使わずに switch 文を使用してください。
参考1:
2000年はたつ年です。
参考2:
(十二支の順)ねずみ / うし / とら / うさぎ / たつ / へび / うま / ひつじ / さる / とり / いぬ / いのしし

練習問題回答例

問題-2.2.1

#include <stdio.h>

main()
{
	int year;

	printf("今年は何年ですか? -> ");
	scanf("%d", &year);

	year = year % 12;

	switch(year){
	case 8:
		printf("あなたは たつ 年生まれですね。\n");
		break;
	case 9:
		printf("あなたは へび 年生まれですね。\n");
		break;
	case 10:
		printf("あなたは うま 年生まれですね。\n");
		break;
	case 11:
		printf("あなたは ひつじ 年生まれですね。\n");
		break;
	case 0:
		printf("あなたは さる 年生まれですね。\n");
		break;
	case 1:
		printf("あなたは とり 年生まれですね。\n");
		break;
	case 2:
		printf("あなたは いぬ 年生まれですね。\n");
		break;
	case 3:
		printf("あなたは いのしし 年生まれですね。\n");
		break;
	case 4:
		printf("あなたは ねずみ 年生まれですね。\n");
		break;
	case 5:
		printf("あなたは うし 年生まれですね。\n");
		break;
	case 6:
		printf("あなたは とら 年生まれですね。\n");
		break;
	/* default のかわりに case 7: としてもかまいません。 */
	default:
		printf("あなたは うさぎ 年生まれですね。\n");
	}

	return 0;
}


読み込み中・・・
10秒待っても表示が変わらない場合、次の理由が考えられます。
・Javascript が無効になっています。
・検索エンジンのキャッシュを見ています。
サイトホームへ / 上位ページへ / ページトップへ / PAROFトレンドショッピングへ
Copyright (C) 2010 totobon all right reserved.