Nodachisoft Nodachi Sword Icon
  
@あまじ✎ 2018年7月11日に更新

第2章15 switch文 条件で実行する処理を分ける

イチからゲーム作りで覚えるC言語
第2章14 if文 条件で実行する処理を分ける・その3 : PREV
NEXT : 第2章16 型の長さ、情報量とビットを知る :

この記事でやること

前回はプロジェクト「0110_simpleif3」を新しく作り、if 文の簡単な書き方をお話ししました。

今回は、新しくプロジェクト「0120_simpleswitch」を作り、引き続き、条件によって実行する処理を分ける switch 文 についてお話します。

プレイヤーの選択で処理を分けるプログラム

ではではプレイヤーからの文字入力を取り扱うサンプルプログラムを作成してみましょう。 プロジェクト「0120_simpleswitch」を新しく用意し、プロジェクトに空の「SimpleSwitch.c」を追加し、下のソースコードをコピペして動かしてみましょう。

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

コピペなりして、実行してみて下さい。

SimpleSwitch.cの実行結果
妖精:よくこの洞窟の底までたどり着きました。
妖精:ほうびに大根かニンジンどちらかをさずけましょう。
システム:入力してください。1:大根 2:ニンジン
入力:

入力を求められますね。

ここで、2を入力してみると、下のような結果がでてきます。

SimpleSwitch.cの実行結果
妖精:よくこの洞窟の底までたどり着きました。
妖精:ほうびに大根かニンジンどちらかをさずけましょう。
システム:入力してください。1:大根 2:ニンジン
入力:2
妖精:ニンジンね。引っこ抜いてくるね。

プレイヤーが入力した値(整数 2)に対して、妖精が反応してニンジンを引っこ抜いてくれています。

ではでは、中身を見ていきましょう。

switch文の実行流れ

switch 文は前回お話した if 文と同じように、条件によって処理の流れを変えることができます。処理の流れを整理してみましょう。下のような流れになります。

Switch文の処理の流れ Switch文の処理の流れ

switch 文は switch(日本語で、切り変える)というイミの通り、条件にあった処理の命令文を実行する、というプログラムの制御をすることができます。 switch は「switch ( 整数の変数 ) {…}」という風に書くことができます。

そして、上の処理の流れの図や、今回のサンプルプログラムの中でも書いていますが、「switch ( 整数の変数 ) { … switch処理の中身 … }」の、{…}部分には、「case」や「break」「default」という文が新しく登場しているかと思います。

switch 文のなかのcase 、default ラベル「switch ( 整数の変数 ) { … switch処理の中身 … }」の{…}部分には、 caseやdefault といったラベルを書くことができます。

switch 文のなかの case ラベル

case ラベルは、

case  整数 :

の形式で書くことができます。整数の後は「;」セミコロンではなく、「:」コロンなので注意してください。 ラベルを書くときに、ラベルのおしまいには「:」コロンの記号を使うのがルールとなっています。

例えば、 switch ( 整数の変数A ) { … } の{ … } 内に 「case 1 :」というラベルを書くことで、整数の変数A が 1 の時に、 「case 1」のラベルの直後からプログラムが実行されます。(プログラムの実行する場所が同じ整数の割り当ててあるラベルの位置に ジャンプします)

switch 文のなかの break 文

swtich 文の中で、「break」文が実行されるとき、switch 文の { … } から抜け出します。つまり、switch 文の{ … } の後からプログラムの続きが実行されます。

switch文の中で break が実行されたときの流れ switch文の中で break が実行されたときの流れ

switch文で break 文を書かないときの流れ

もしも break 文を書いていない場合はどうなるでしょうか。

例えば、上の図で case B: にジャンプしたとき、break の記載がなければ、 ラベルを超えて、次の行、次の行と処理されていき、複数の命令文B → 複数の命令文C → 複数の命令文D の上から順番に全てが実行されます。

switch 文で default ラベル

default ラベルは、 default : の形式で書くことができます。 case ラベルと違って、整数などを書き加える必要はありません。必須ではないので、書かなくても大丈夫です。

case ラベルでつけた整数のどれにも引っかからなかったときに、この default ラベルにジャンプしてきます。

サンプルコードの処理を追う

サンプルコードで整数 2 を入力して、ニンジンを選択したときに実行される行をハイライトにしてみます。

 
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 でもない数値を入力すると、default ラベルに処理がジャンプします。(case 1 にも case 2 にも一致しないので)

変な入力をすると妖精の提案以外だとなにももらえない、ということになりますね。

あとがき

今回はここまで。お疲れさまでした。

非常に参考になったサイトさまや、参考文献など

ページの更新履歴

更新日 更新内容
更新なし
イチからゲーム作りで覚えるC言語
第2章14 if文 条件で実行する処理を分ける・その3 : PREV
NEXT : 第2章16 型の長さ、情報量とビットを知る :
 
 
送信しました!

コメント、ありがとうございます。

なんかエラーでした

ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。

Twitter:@NodachiSoft_jp
お名前:
 
連絡先:
 
メッセージ:
 
戻る
内容の確認!

以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください

お名前:
 
連絡先:
 
メッセージ:
 
Roboto からの操作ではないという確認のため確認キーを入れてください。
確認キー=95
戻る
 / 
送信確認へ
コメント欄
コメント送信確認へ

関連ありそうな記事(5件)です!

ゲーム等で使えるつなぎ目のないループするテクスチャ画像の作り方

#ツール#ゲームプログラミング✎ 2021-01-24
ゲームなどで使えるループ画像、パターンテクスチャのツール、手動での作り方をまとめ
広告領域
追従 広告領域
目次
第2章15 switch文 条件で実行する処理を分ける
第2章15 switch文 条件で実行する処理を分ける
この記事でやること
この記事でやること
プレイヤーの選択で処理を分けるプログラム
プレイヤーの選択で処理を分けるプログラム
switch文の実行流れ
switch文の実行流れ
switch 文のなかの case ラベル
switch 文のなかの case ラベル
switch 文のなかの break 文
switch 文のなかの break 文
switch文で break 文を書かないときの流れ
switch文で break 文を書かないときの流れ
switch 文で default ラベル
switch 文で default ラベル
サンプルコードの処理を追う
サンプルコードの処理を追う
あとがき
あとがき
非常に参考になったサイトさまや、参考文献など
非常に参考になったサイトさまや、参考文献など
ページの更新履歴
ページの更新履歴
Nodachisoft © 2020