第2章12 if文 条件で実行する処理を分ける@イチからゲーム作りで覚えるC言語

行先の選択肢if else文

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

この記事でやること

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

この記事はゆる~くC言語でコンソールゲームを作りながらプログラミングを学ぶための連載記事です。シリーズものですので記事の一覧はこちらを参照してくださいね。

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

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

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

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

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

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

if ~ else 文の書き方

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

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

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

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

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

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

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

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

 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 行目にあたります。

   printf("難易度で EASY ");

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

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

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

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

 int muzukasisa = 100;

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

 if (muzukasisa == 1) {

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

 if ( 0 ) {

条件文の中身が 0 ( false ) なので、”複数の命令文B” が実行されることになります。
このプログラムを実行した結果は下のようになります。

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

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

条件分岐と if 文

基礎知識に近いお話なので、ちょっと退屈かもしれませんが重要な事ですので、記載します。
すでにお話したように、 if 文はC言語で条件分岐を行うのための代表的な文です。
いままではソースコードは上から下に順番に実行されるだけでした。上から順番に実行されることを逐次処理(ちくじしょり)と呼びます。でも逐次処理だけでは、いろいろな条件に対応する柔軟なプログラムは作れません。
C言語ではいくつかの条件分岐の命令を持っていますが、この if 文が使えるようになるだけで作ることのできるプログラムの幅はグッと増えることになります。
if 文以外にも、switch 文など、いくつかの条件分岐の文がありますので、今後お話したいと思います。

あとがき

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

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

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

ページの更新履歴

更新日更新内容
更新なし