前回はプロジェクト「0110_simpleif3」を新しく作り、if 文の簡単な書き方をお話ししました。
今回は、新しくプロジェクト「0120_simpleswitch」を作り、引き続き、条件によって実行する処理を分ける switch 文 についてお話します。
ではではプレイヤーからの文字入力を取り扱うサンプルプログラムを作成してみましょう。 プロジェクト「0120_simpleswitch」を新しく用意し、プロジェクトに空の「SimpleSwitch.c」を追加し、下のソースコードをコピペして動かしてみましょう。
#include <stdio.h>
int main() {
int input = 0;
printf("妖精:よくこの洞窟の底までたどり着きました。\n");
printf("妖精:ほうびに大根かニンジンどちらかをさずけましょう。\n");
printf("システム:入力してください。1:大根 2:ニンジン \n");
printf("入力:");
scanf_s("%d", &input);
switch (input) {
case 1:
printf("妖精:大根ね。引っこ抜いてくるね。\n");
break;
case 2:
printf("妖精:ニンジンね。引っこ抜いてくるね。\n");
break;
default:
printf("妖精:それ以外あげるものはないです。\n");
}
}
コピペなりして、実行してみて下さい。
妖精:よくこの洞窟の底までたどり着きました。
妖精:ほうびに大根かニンジンどちらかをさずけましょう。
システム:入力してください。1:大根 2:ニンジン
入力:
入力を求められますね。
ここで、2を入力してみると、下のような結果がでてきます。
妖精:よくこの洞窟の底までたどり着きました。
妖精:ほうびに大根かニンジンどちらかをさずけましょう。
システム:入力してください。1:大根 2:ニンジン
入力:2
妖精:ニンジンね。引っこ抜いてくるね。
プレイヤーが入力した値(整数 2)に対して、妖精が反応してニンジンを引っこ抜いてくれています。
ではでは、中身を見ていきましょう。
switch 文は前回お話した if 文と同じように、条件によって処理の流れを変えることができます。処理の流れを整理してみましょう。下のような流れになります。
switch 文は switch(日本語で、切り変える)というイミの通り、条件にあった処理の命令文を実行する、というプログラムの制御をすることができます。 switch は「switch ( 整数の変数 ) {…}」という風に書くことができます。
そして、上の処理の流れの図や、今回のサンプルプログラムの中でも書いていますが、「switch ( 整数の変数 ) { … switch処理の中身 … }」の、{…}部分には、「case」や「break」「default」という文が新しく登場しているかと思います。
switch 文のなかのcase 、default ラベル「switch ( 整数の変数 ) { … switch処理の中身 … }」の{…}部分には、 caseやdefault といったラベルを書くことができます。
case ラベルは、
case 整数 :
の形式で書くことができます。整数の後は「;」セミコロンではなく、「:」コロンなので注意してください。 ラベルを書くときに、ラベルのおしまいには「:」コロンの記号を使うのがルールとなっています。
例えば、 switch ( 整数の変数A ) { … } の{ … } 内に 「case 1 :」というラベルを書くことで、整数の変数A が 1 の時に、 「case 1」のラベルの直後からプログラムが実行されます。(プログラムの実行する場所が同じ整数の割り当ててあるラベルの位置に ジャンプします)
swtich 文の中で、「break」文が実行されるとき、switch 文の { … } から抜け出します。つまり、switch 文の{ … } の後からプログラムの続きが実行されます。
もしも break 文を書いていない場合はどうなるでしょうか。
例えば、上の図で case B: にジャンプしたとき、break の記載がなければ、 ラベルを超えて、次の行、次の行と処理されていき、複数の命令文B → 複数の命令文C → 複数の命令文D の上から順番に全てが実行されます。
default ラベルは、 default :
の形式で書くことができます。
case ラベルと違って、整数などを書き加える必要はありません。必須ではないので、書かなくても大丈夫です。
case ラベルでつけた整数のどれにも引っかからなかったときに、この default ラベルにジャンプしてきます。
サンプルコードで整数 2 を入力して、ニンジンを選択したときに実行される行をハイライトにしてみます。
#include <stdio.h>
int main() {
int input = 0;
printf("妖精:よくこの洞窟の底までたどり着きました。\n");
printf("妖精:ほうびに大根かニンジンどちらかをさずけましょう。\n");
printf("システム:入力してください。1:大根 2:ニンジン \n");
printf("入力:");
scanf_s("%d", &input);
switch (input) {
case 1:
printf("妖精:大根ね。引っこ抜いてくるね。\n");
break;
case 2:
printf("妖精:ニンジンね。引っこ抜いてくるね。\n");
break;
default:
printf("妖精:それ以外あげるものはないです。\n");
}
}
ここで、 1 でも 2 でもない数値を入力すると、default ラベルに処理がジャンプします。(case 1 にも case 2 にも一致しないので)
変な入力をすると妖精の提案以外だとなにももらえない、ということになりますね。
今回はここまで。お疲れさまでした。
更新日 | 更新内容 |
---|---|
更新なし |
コメント、ありがとうございます。
ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。
Twitter:@NodachiSoft_jpお名前:以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください
お名前: