Nodachisoft Nodachisoft logo, Katana Sword Icon
  
@あまじ✎ 2018年7月7日に更新

第2章13 if文 条件で実行する処理を分ける・その2

第2章13 if文 条件で実行する処理を分ける・その2
イチからゲーム作りで覚えるC言語
第2章12 if文 条件で実行する処理を分ける : PREV
NEXT : 第2章14 if文 条件で実行する処理を分ける・その3 :

この記事でやること

前回はプロジェクト「0090_simpleif1」を新しく作り、if ~ else 文を使う方法をお話ししました。

今回は引き続き、条件で処理を分けるための、if ~ else if ~ else 文 の使い方についてお話します。

設定された難易度を表示するプログラム

ではではプレイヤーからの文字入力を取り扱うサンプルプログラムを作成してみましょう。

プロジェクト「0100_simpleif2」を新しく用意し、プロジェクトに空の「SimpleIf2.c」を追加し、下のソースコードをコピペして動かしてみましょう。

 
SimpleIf2.c
#include <stdio.h>
int main(void) {
 int muzukasisa = 1;
 if (muzukasisa == 1) {
   printf("難易度で EASY が選択されています。\n");
 }
 else {
  printf("難易度で NORMAL が選択されています。\n");
 }
 printf("が選択されています。\n");
}

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

SimpleIf2.c
難易度で NORMAL が選択されています。

こんな結果となります。

今は難易度に NORMAL が選択されている、という結果が表示されました。

if ~ else if ~ else 文の書き方

if ~ else if ~ else について、どのように使うのかを見ていきましょう。 書き方は下のようになります。

if_elseif_elseの文
if ( 条件文1 ) { … 複数の命令文A … }
else if ( 条件文2 ) { … 複数の命令文B … }
else if ( 条件文n ) { … 複数の命令文C … }
else { … 複数の命令文D … }
  • まず条件文1が整数 0 ( false ) 以外なら「複数の命令文A」を実行、そうでないとき、
  • 次の条件文2が整数 0 ( false ) 以外なら「複数の命令文B」を実行、そうでないとき、
  • 次の条件文n が整数 0 ( false ) 以外なら「複数の命令文n」を実行、そうでないとき、
  • else {…} の「複数の命令文D」を実行。

という流れでプログラムは実行されていきます。

複数の条件を上から見ていき、合致するものがあれば、その else if 文の{…命令文…}だけを実行する 、という流れです。 else if の条件はいくつでも増やして書くことができます。

ソースコードの形と照らし合わせてみてみましょう。

If ~ else if ~ else 文での条件分岐の流れ If ~ else if ~ else 文での条件分岐の流れ

こんなルールに従って実行されます。ちょっと複雑なように見えますが、実際に何度か使うと直感的な文で書けることがわかると思います。

ソースコードの処理の流れ

実際にソースコードを追ってみましょう。

 
SimpleIf2.c
 int muzukasisa = 2;
 char* muzukasisa_moji;
  • 3 行目で変数 muzukasisa に整数 2 が代入されています。
  • 4 行目で文字列を代入可能な変数 muzukasisa_moji を使えるように宣言します。
  • 6 行目からが if ~else if~elseの記載となります。
 
SimpleIf2.c
 // 変数 muzukasisa によって処理が分岐する
 if (muzukasisa == 1) {
   muzukasisa_moji = "EASY";
 }
 else if (muzukasisa == 2) {
   muzukasisa_moji = "NORMAL";
 }
 else if (muzukasisa == 3) {
   muzukasisa_moji = "HARD";
 }
 else {
   muzukasisa_moji = "VERY HARD";
 }

7 行目の 「if ( muzukasisa == 1 ) {」について、変数 muzukasisa には 2 が入っていますので、正しくありません。(正しくない = 0、つまり false) ですので、直後の7~9行目の{・・・}は実行されません。

7 行目が正しくないのため、次に近い 10 行目の else if の判定に移ります。10 行目では「else if ( muzukasisa == 2 ) {」で、変数 muzukasisa が 2 と等しいかの比較をしています。これは正しいので、直後の 10行目~12行目の{・・・}が実行されます。

 
SimpleIf2.c
 muzukasisa_moji = "NORMAL";

11行目が実行されることで、あらかじめ 4 行目で宣言していた、文字列を代入できる変数 muzukasisa_moji に文字列 "NORMAL" を代入することができました。

それ以降の行(13行~18行)に書いてある else if { … } else { … }はどうなるでしょうか。

if ~ else if ~ else の構造では、合致する条件にあてはまるものが見つかれば、それ以外・それ以降の else if ~ else は実行されません

今回のプログラムで実行される行をハイライトにしてみます。

 
SimpleIf2.c
#include <stdio.h>
int main() {
 int muzukasisa = 2;
 char* muzukasisa_moji;

 // 変数 muzukasisa によって処理が分岐する
 if (muzukasisa == 1) {
   muzukasisa_moji = "EASY";
 }
 else if (muzukasisa == 2) {
   muzukasisa_moji = "NORMAL";
 }
 else if (muzukasisa == 3) {
   muzukasisa_moji = "HARD";
 }
 else {
   muzukasisa_moji = "VERY HARD";
 }
 // 難易度を表示
 printf("難易度で %s が選択されています。\n", muzukasisa_moji);
}

最後の printf 関数で難易度を表示する行は必ず通ることになります。

このソースコードは変数 muzukasisa に代入する数値を変えることで、実行される行を変更することができることがわかります。

いくつか、3 行目で muzukasisa に入れる数値を変えて、結果がどうなるかを確認しましょう。

変数 muzukasisa に代入する数値 変数 muzukasisa_moji に入る難易度
0 "VERY HARD"
1 "EASY"
2 "NORMAL"
3 "HARD"
4 "VERY HARD"
5 "VERY HARD"
-100 "VERY HARD"

こんな感じで、いくつかの条件でプログラムの処理を切り替えてあげることができるようになりました。

あとがき

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

次回は if 文のそのほかの書き方と、比較演算子との組み合わせ例を少しだけお話したいと思います。

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

ページの更新履歴

更新日 更新内容
更新なし

イチからゲーム作りで覚えるC言語
第2章12 if文 条件で実行する処理を分ける : PREV
NEXT : 第2章14 if文 条件で実行する処理を分ける・その3 :
 
 
送信しました!

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

なんかエラーでした

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

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

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

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

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

第1章01 Visual Studio Community 2019 のインストール手順

第1章01 Visual Studio Community 2019 のインストール手順

#C11仕様#C言語#ゲームプログラミング✎ 2021-08-08
C言語でプログラミングをするために、無料で使える Visual Studio Community を使った開発環境を揃えていく手順や注意点をお話しています。
目次
第2章13 if文 条件で実行する処理を分ける・その2
第2章13 if文 条件で実行する処理を分ける・その2
この記事でやること
この記事でやること
設定された難易度を表示するプログラム
設定された難易度を表示するプログラム
if ~ else if ~ else 文の書き方
if ~ else if ~ else 文の書き方
ソースコードの処理の流れ
ソースコードの処理の流れ
あとがき
あとがき
非常に参考になったサイトさまや、参考文献など
非常に参考になったサイトさまや、参考文献など
ページの更新履歴
ページの更新履歴
Nodachisoft © 2021