
前回はプロジェクト「0090_simpleif1」を新しく作り、if ~ else 文を使う方法をお話ししました。
今回は引き続き、条件で処理を分けるための、if ~ else if ~ else 文 の使い方についてお話します。
ではではプレイヤーからの文字入力を取り扱うサンプルプログラムを作成してみましょう。
プロジェクト「0100_simpleif2」を新しく用意し、プロジェクトに空の「SimpleIf2.c」を追加し、下のソースコードをコピペして動かしてみましょう。
#include <stdio.h>
int main(void) {
int muzukasisa = 1;
if (muzukasisa == 1) {
printf("難易度で EASY が選択されています。\n");
}
else {
printf("難易度で NORMAL が選択されています。\n");
}
printf("が選択されています。\n");
}
コピペなりして、実行してみて下さい。
難易度で NORMAL が選択されています。
こんな結果となります。
今は難易度に NORMAL が選択されている、という結果が表示されました。
if ~ else if ~ else について、どのように使うのかを見ていきましょう。 書き方は下のようになります。
if ( 条件文1 ) { … 複数の命令文A … }
else if ( 条件文2 ) { … 複数の命令文B … }
else if ( 条件文n ) { … 複数の命令文C … }
else { … 複数の命令文D … }
という流れでプログラムは実行されていきます。
複数の条件を上から見ていき、合致するものがあれば、その else if 文の{…命令文…}だけを実行する 、という流れです。 else if の条件はいくつでも増やして書くことができます。
ソースコードの形と照らし合わせてみてみましょう。
If ~ else if ~ else 文での条件分岐の流れ
こんなルールに従って実行されます。ちょっと複雑なように見えますが、実際に何度か使うと直感的な文で書けることがわかると思います。
実際にソースコードを追ってみましょう。
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";
}
7 行目の 「if ( muzukasisa == 1 ) {」について、変数 muzukasisa には 2 が入っていますので、正しくありません。(正しくない = 0、つまり false) ですので、直後の7~9行目の{・・・}は実行されません。
7 行目が正しくないのため、次に近い 10 行目の else if の判定に移ります。10 行目では「else if ( muzukasisa == 2 ) {」で、変数 muzukasisa が 2 と等しいかの比較をしています。これは正しいので、直後の 10行目~12行目の{・・・}が実行されます。
muzukasisa_moji = "NORMAL";
11行目が実行されることで、あらかじめ 4 行目で宣言していた、文字列を代入できる変数 muzukasisa_moji に文字列 "NORMAL" を代入することができました。
それ以降の行(13行~18行)に書いてある else if { … } else { … }はどうなるでしょうか。
if ~ else if ~ else の構造では、合致する条件にあてはまるものが見つかれば、それ以外・それ以降の else if ~ else は実行されません。
今回のプログラムで実行される行をハイライトにしてみます。
#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 文のそのほかの書き方と、比較演算子との組み合わせ例を少しだけお話したいと思います。
更新日 | 更新内容 |
---|---|
更新なし |
コメント、ありがとうございます。
ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。
Twitter:@NodachiSoft_jpお名前:以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください
お名前: