今までに習ってきた方法では、1択ないしは2択の処理しか出来ませんでした。
しかし、現実には、3択以上の判断を必要とすることがいくらでもあります。
例えば、ある動物園の入場料と年齢の関係が次の通りだったとします。
区分 | 年齢 | 入場料 |
---|---|---|
幼児 | 3歳以下 | 無料 |
子供 | 4〜12歳 | 250円 |
大人 | 13歳以上 | 400円 |
一見するとこのプログラムでも問題がないように見えるのですが、#include <stdio.h> int main(void) { int age; printf("年齢:"); scanf("%d",&age); if (age <= 3) printf("幼児:無料\n"); if (age >= 4 && age <= 12) printf("子供:250円\n"); if (age >= 13) printf("大人:400円\n"); return 0; }
この無駄をなくすには、if〜else文を連続させれば良いのです。
つまり、else文の実行文として、if文を使用することで、
直前に判断した内容を生かすことが出来、無駄がなくなるのです。
この考えかたで修正したプログラムは、次の通りになります。
このプログラムのポイントは、else文で実行する文にif文を使っている点です。#include <stdio.h> int main(void) { int age; printf("年齢:"); scanf("%d",&age); if (age <= 3) { printf("幼児:無料\n"); } else { if (age <= 12) { printf("子供:250円\n"); } else { printf("大人:400円\n"); } } return 0; }
前項のプログラムでは、確かに処理上の無駄はなくなったのですが、
プログラム自体はお世辞にも見やすいとは言えませんでした。
しかも、インデントによってどんどん右にずれていくために、
条件が3つよりも多くなるとますます見にくくなることが予想されます。
これを見やすい文にするには、インデントを無視するしか方法はありません。
次のプログラムは、インデントを無視することで見やすくした例です。
このプログラムでは、else文のすぐ後ろにif文をつなげています。#include <stdio.h> int main(void) { int age; printf("年齢:"); scanf("%d",&age); if (age <= 3) { printf("幼児:無料\n"); } else if (age <= 12) { printf("子供:250円\n"); } else { printf("大人:400円\n"); } return 0; }
この書き方の良い所は、条件がいくつ増えても横に長くならないことです。
else文にifを書き足していくことで、下にどんどん伸びていきますが、
横方向には決して伸びないので、比較的見やすいプログラムになります。
これは、インデントを無視すると読みやすくなる特殊な例です。
ほとんどの場合にはインデントを使用した方が読みやすくなります。