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

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

イチからゲーム作りで覚えるC言語
第2章11 比較演算を使えるようになる : PREV
NEXT : 第2章13 if文 条件で実行する処理を分ける・その2 :

この記事でやること

前回はプロジェクト「0080_hikaku_enzan」を新しく作り、比較演算を使う方法をお話ししました。 今回は、新しくプロジェクト「0090_simpleif1」を作り、条件によって実行する処理を分けるif文についてお話します。 今回のお話の中で、前回お話した比較演算をすこし使います。

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

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

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

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

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

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

こんな結果となります。

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

if ~ else 文の書き方

ではでは、今回のプログラムで使っている重要な if文 について、どのように使うのかを見ていきましょう。

if~else分の文法
if ( 条件1 ) { … 複数の命令文A … } else { … 複数の命令文B … }

条件1が整数 0 ( false ) 以外なら、「複数の命令文A」を実行、整数 0 ( false )なら「複数の命令分B」を実行 します。ちょっとわかりずらいですね。ソースコードの形と照らし合わせてみてみましょう。

簡単な if 文を使った時の処理の流れ 簡単な if 文を使った時の処理の流れ

こんなルールに従って実行されます。 重要なのは、 複数の命令文 A が実行されたあとに B は実行されない 、ということです。

なお、一般的な書き方として、 if 、else で実行される、「複数の命令文」の部分は、わかりやすいように、インデント(行頭にタブやスペースをいれること)をして人間の目から見てわかりやすいようにしています。

ソースコードの例での実行の流れ

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

 
SimpleIf1.c
 int muzukasisa = 1;
 if (muzukasisa == 1) {
   printf("難易度で EASY ");
 }
 else {
   printf("難易度で NORMAL 以上");
 }
 printf("が選択されています。\n");

3 行目で変数 muzukasisa に整数 1 が代入されています。

4 行目からが if 文の記載となります。

if ( 条件文 ) { ・・・ } の、条件文の部分は muzukasisa == 1 と記載してあります。 記号「==」は前のページでお話した比較演算子で、左辺と右辺が同じ数値だったら結果は 1 ( true ) 、そうでないなら 0 ( false ) ということになります。

ですので今回の muzukasisa == 1 の結果は 1 ( true ) となります。

では、if文の書き方をもう一度確認します。

if ( 条件文 ) { 複数の命令文A } else { 複数の命令文B }

で、条件文の中身は 1 ( true ) でした。

「複数の命令文A」が実行されるのは、"条件文の中身が 0 ( false ) 以外" のときで、今回はコレに当てはまってますね!ですので、複数の命令文Aの中身が実行されます。

複数の命令文A にあたる箇所は、下の 5 行目にあたります。

 
SimpleIf1.c
   printf("難易度で EASY ");

この5行目が終わったら、その後の else { …複数の命令文B… } 部分は実行されずに、 「if ( 条件文 ) { 複数の命令文A } else { 複数の命令文B } 」が完了した 8 行目から続きが実行されます。

 
SimpleIf1.c
 printf("が選択されています。\n");

ソースコードを書き換えて else 内を実行

ソースコードを書き換えて、else { 複数の命令文B } を実行するにはどうしたら良いでしょうか。今回の条件文の中身が 0 となるように書き換えてあげれば良さそうですね。

いろいろな書き換えかたはあると思いますが、シンプルなのは下のような書き換えと思います。

 
SimpleIf1.c
 int muzukasisa = 100;

3行目の変数 muzukasisa に整数 1 ではなく、 1 以外を代入すれば良さそうです。 今回は例として整数 100 を代入してみました。

 
SimpleIf1.c
 if (muzukasisa == 1) {

これで、4行目の muzukasisa == 1 は、 100 == 1 と置き換えられ、比較演算の結果は偽(不正解)なので、 0 ( false ) となり、以下のように内部で置き換えられます。

 
SimpleIf1.c
 if ( 0 ) {

条件文の中身が 0 ( false ) なので、"複数の命令文B" が実行されることになります。

このプログラムを実行した結果は下のようになります。

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

ちゃんと結果が変わっていますね。それと、今回は "複数の命令文A" は実行されていません。

条件分岐と if 文

基礎知識に近いお話なので、ちょっと退屈かもしれませんが重要な事ですので、記載します。

すでにお話したように、 if 文はC言語で条件分岐を行うのための代表的な文です。

いままではソースコードは上から下に順番に実行されるだけでした。上から順番に実行されることを逐次処理(ちくじしょり)と呼びます。でも逐次処理だけでは、いろいろな条件に対応する柔軟なプログラムは作れません。

C言語ではいくつかの条件分岐の命令を持っていますが、この if 文が使えるようになるだけで作ることのできるプログラムの幅はグッと増えることになります。

など、いくつかの条件分岐の文がありますので、今後お話したいと思います。

あとがき

今回はここまで。

次回も引き続き if 文についてお話したいと思います。

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

ページの更新履歴

更新日 更新内容
更新なし
イチからゲーム作りで覚えるC言語
第2章11 比較演算を使えるようになる : PREV
NEXT : 第2章13 if文 条件で実行する処理を分ける・その2 :
 
 
送信しました!

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

なんかエラーでした

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

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

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

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

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

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

#ツール#ゲームプログラミング✎ 2021-01-24
ゲームなどで使えるループ画像、パターンテクスチャのツール、手動での作り方をまとめ
広告領域
追従 広告領域
目次
第2章12 if文 条件で実行する処理を分ける
第2章12 if文 条件で実行する処理を分ける
この記事でやること
この記事でやること
設定された難易度を表示するプログラム
設定された難易度を表示するプログラム
if ~ else 文の書き方
if ~ else 文の書き方
ソースコードの例での実行の流れ
ソースコードの例での実行の流れ
ソースコードを書き換えて else 内を実行
ソースコードを書き換えて else 内を実行
条件分岐と if 文
条件分岐と if 文
あとがき
あとがき
非常に参考になったサイトさまや、参考文献など
非常に参考になったサイトさまや、参考文献など
ページの更新履歴
ページの更新履歴
Nodachisoft © 2020