プログラムに多彩な機能を持たせる条件分岐のやり方とは…?
条件によってプログラムの動きを変えたい!
前回の記事で条件分岐に必要な『条件式の作り方』をマスターすることができました。

ということは、次に学んでいくのはもちろん…
条件分岐とは『条件を満たしたときに特定の処理を行う方法』のことです。
この機能をマスターすれば、いろんな動作をするプログラムを作ることができます。
ぜひマスターして、プログラムの幅を広げていきましょう。
気になるところへGO!
条件分岐の機能を持つ『if文』を使ってみよう!

C言語で条件分岐を使いたいときは、次のようなコードを書けばOKです。
if(条件式){処理}
このコードは『if文』もしくは『if関数』と呼ばれるもので、条件分岐の機能を持っています。
if関数への引数となる『条件式』の部分には、前回の方法で作った条件式を記入してください。
そして、『処理』の部分には『条件を満たしたときに行いたい処理』を書けばOKです。
例えば、i=1のときに『あ』を表示したいなら、if(i==1){printf(“あ\n”);}みたいなイメージになります。
この形式のコードを書くと、条件式の評価結果が1になったときに、{}の中に書いた処理を実行することができるのです。
それでは、次のプログラムを実行してみましょう。
#include<stdio.h>
int main(void) {
int i = 0;
printf("10を入力してください!→");
scanf("%d", &i);
//*****新しく追加*****
if (i == 10) {
printf("正解です!\n");
}
//*****ここまで*****
return 0;
}
このブログラムを実行すると、『10を入力してください!→』と表示されると思います。
そして、キーボードで『10』を入力すると『正解です!』と表示されるプログラムなんです。
先程のプログラムで、10以外の数値を入力すると何も表示されないことが確認できたと思います。
このことから、if文の{}に書いた処理は条件式を満たしたときにだけ実行されていることがわかるのです。
条件式を満たさないときの処理は『else文』で追加しよう!

次のコードを書くと、条件式を満たさなかったときの処理を追加することができます。
else{処理}
この文は『else文』と呼ばれるもので、書く場所は『if文の後』になります。
さっそくプログラムをみてみましょう。
#include<stdio.h>
int main(void) {
int i = 0;
printf("10を入力してください!→");
scanf("%d", &i);
if (i == 10) {
printf("正解です!\n");
}
//*****新しく追加*****
else {
printf("ちゃうわ!\n");
}
//*****ここまで*****
return 0;
}
このプログラムはさっきのプログラムにelse文を追加したものになります。
なので、10を入力したときに『正解です!』と表示される機能は変わっていません。
では、次に『20』を入力してみましょう。
どんな動作になったでしょうか?
10以外の数値を入力すると『ちゃうわ!』と表示されたと思います。
つまり、if文の条件を満たさなかったときは、else文の処理が実行されているのです。
このように、if文の後にelse文を書けば、『if文の条件式以外』という2つめの条件を付け加えることができます。
『else if文』で3つめの条件を追加してみよう!

if文を使っていくと、『3つ目の条件を追加したい!』と思うときが必ずきます。
というのも、世の中には『じゃんけん』のように、3種類以上の条件分岐になるものがたくさんあるからです。
このようなときには、次のようなコードを追加します。
else if(条件式){処理}
これは『else if文』と呼ばれるコードになります。
もちろん、書く場所はif文とelse文の間です。
というのも、3つ目の条件を加えるときには、『条件1・条件2・それ以外』というようにする必要があるからです。
『条件1』はif文が、『それ以外』はelse文が担当しているので、『条件2』を担当するelse if文はその間に書く必要があります。
#include<stdio.h>
int main(void) {
int i = 0;
printf("10を入力してください!→");
scanf("%d", &i);
if (i == 10) {
printf("正解です!\n");
}
//*****新しく追加*****
else if ((i == 11) || (i == 9)) {
printf("おしい!\n");
}
//*****ここまで*****
else {
printf("ちゃうわ!\n");
}
return 0;
}
if文とelse文は先程のプログラムから変更していません。
なので、10を入力すれば『正解です!』を、20を入力すれば『ちゃうわ!』と表示されます。
では、今回は試しに『11』か『9』を入力してみてください。
このような結果になった理由をコードを見て確認してみましょう。
『11 or 9』を入力した場合は、if文の『i==10』という条件を満たすことはありません。
なので、if文の処理は実行されないことはお分かりだと思います。
では次のelse if文の条件式をみてください。
((i==11) || (i==9))という条件式が書かれています。
この条件の意味は覚えていますよね?
else if文の条件式は『9』か『11』のどちらかが入力されたときに成立します。
そのため、今回のように『11 or 9』を入力すると、else if文が発動するのです。
その結果、else if文の処理にかかれている『おしい!』が表示されることになります。
条件分岐を4つ以上にしたい場合は、else if文をさらに追加すればOKです。
書く場所はもちろん、elseの前になります。
そのようなコードを書けば、1つ目のelse if文の条件を満たさなかったときに、2つ目のelse if文の判定が行われます。
このような方法でたくさんの条件を追加することが可能です。
実は、実際の開発では『else』『else if』はあまり使わない方がいいです。
というのも、これらを多用してしまうとメンテナンスが難しいプログラムになるからです。(この対策として『早期return』があります。)
でも最初のうちは使っても問題ないので、気にせず使って練習してみてください!
注意点:もし複数の条件式に当てはまったときは…?

これからプログラムを書いていくうちに、if文の条件式とelse if文の条件式の両方に当てはまることもあるかもしれません。
例えば次のプログラムのイメージです。
#include<stdio.h>
int main(void) {
int score = 0;
printf("点数を入力してください!→");
scanf("%d", &score);
if (score >= 80) {
printf("特待生\n");
}
else if (score >= 60) {
printf("合格\n");
}
else {
printf("不合格!\n");
}
return 0;
}
このプログラムはテストの点数を入力すると『特待生・合格・不合格』のいずれかを出力するプログラムです。
実行すると『点数を入力してください!→』と表示されますので、キーボードで点数を入力しましょう。
『50』を入力すると『不合格』が、『70』を入力すると『合格』が表示されると思います。
では、最後に『90』を入力する場合を考えてみましょう。
この場合、『if文の条件式』と『else if文の条件式』の両方に当てはまることになります。
2つの条件に当てはまるのだから『特待生』と『合格』が表示されるように思えるのですが…
実は『特待生』しか表示されないんです。
実はelse if文とelse文には発動条件があります。
それは『これまでの条件式を満たさなかったときだけ発動する』という条件です。
先程のプログラムの場合、else if文の前にあるのはif文ですよね。
そのため、if文に当てはまらないときにしかelse if文は発動しないのです。
よって、先程のプログラムで90を入力すると、if文の条件に合致することになるので、else if文とelse文は無視されることになります。
その結果『特待生』しか表示されなかったんです。
たしかに、先程ご紹介した発動条件を考慮すると条件式に重複があっても良さそうな気がします。
でも、実際の開発では絶対にダメです。
条件式に重複がある時点で、上司に『条件式をきちんと考えられていない』と修正指示を出されることになりますし。
別の人がコードを読んだときに『条件を重複させるということは何か特別な意図がある』と思われてしまい、保守が難しくなります。
このような条件式の重複は開発現場に混乱をもたらすだけなので、条件式は重複しないようにきちんと作りましょう!
まとめ
以上が基本的な条件分岐のやり方です。
『if』『else』『else if』を使うだけで、多種多様な条件分岐ができるようになります。
まずは、これらを駆使していろんな機能をもつプログラムを作ってみてください!
