C言語のきほん|多分岐の条件文

条件が増えても迷わない。if~else if~else~で、分岐をスッキリ整理しよう!

if文を覚えると、プログラムが一気に“賢く”見えてきますよね。
でも、少し慣れてくるとこう思います。

  • 条件が2つじゃ足りない…
  • 3つ、4つ、もっと場合分けしたい…
  • しかも「どれか1つだけ実行」してほしい…

そんなときに登場するのが if~else if~else~ です。
これは「上から順番に条件をチェックして、最初に当たった処理だけ実行する」ための書き方です。

イメージとしては、店員さんがあなたに質問していく感じです。

  1. これに当てはまる? → はいなら決定
  2. じゃあ次、これは? → はいなら決定
  3. どれでもない? → 最後の案(else)へ

この“順番にチェックして、最初の1つに決める”という性質が、多分岐の基本になります。

if~else if~else~は「上から順に当てはめるルール」

基本構文はこれです。

if (条件式1) {
    文1;
}
else if (条件式2) {
    文2;
}
else if (条件式n) {
    文n;
}
else {
    文m;
}

ここで大事なのは次の2つです。

  • 条件は上から順に評価される
  • 最初に真になったブロックだけ実行され、残りは見ない

つまり、上の方で条件に当たったら、その時点で勝負が決まります。

分岐の流れを図でつかもう(頭の中の動き)

文章だけだと「結局どう流れるの?」となりやすいので、超シンプルに図で表しますね。

判定の順番チェックすること真なら偽なら
1条件式1文1を実行して終了次へ
2条件式2文2を実行して終了次へ
条件式n文nを実行して終了次へ
最後どれも真じゃない文mを実行して終了なし

ポイントは「終了」ってところです。
当たったら、その下にある条件はもう確認しません。

プログラム例:気温で服装アドバイスを変える

ファイル名:8_6_1.c

#include <stdio.h>

int main(void)
{
    int temp;

    printf("今日の気温(℃)を入力してね > ");
    scanf("%d", &temp);

    if (temp >= 30) {
        printf("かなり暑い!水分補給を忘れずにね。\n");
    }
    else if (temp >= 20) {
        printf("過ごしやすい気温だよ。軽めの服でOK!\n");
    }
    else if (temp >= 10) {
        printf("ちょっとひんやり。上着があると安心だね。\n");
    }
    else {
        printf("寒い!しっかり防寒して出かけよう。\n");
    }

    return 0;
}

実行結果の例(どの分岐に入ったか確認しよう)

例1:temp が 30 以上(最上段の条件にヒット)

入力が 33 の場合:

  • temp >= 30 が真 → 1段目が実行
  • その下の else if 以降は見ない

出力イメージ:

  • かなり暑い!水分補給を忘れずにね。

例2:temp が 20 以上 30 未満(2段目にヒット)

入力が 24 の場合:

  • temp >= 30 は偽
  • temp >= 20 は真 → 2段目が実行
  • 以降は見ない

出力イメージ:

  • 過ごしやすい気温だよ。軽めの服でOK!

例3:temp が 10 以上 20 未満(3段目にヒット)

入力が 15 の場合:

  • 1段目:偽
  • 2段目:偽
  • 3段目:真 → 実行

出力イメージ:

  • ちょっとひんやり。上着があると安心だね。

例4:temp が 10 未満(全部外れて else)

入力が 3 の場合:

  • どれも真にならない → else が実行

出力イメージ:

  • 寒い!しっかり防寒して出かけよう。

どうして条件の順番が大事なの?

if~else if~else~は「上から順番に当てはめていく」仕組みなので、順番を間違えると想定外の結果になります。

たとえば、こんな並びは危険です。

  • temp >= 10 を先に書く
  • その後に temp >= 30 を書く

この場合、temp が 35 でも temp >= 10 が真になっちゃうので、暑い判定にたどり着けません。
だから基本は、

  • 範囲が広い条件を下に
  • 厳しい条件(大きい値など)を上に

という並べ方が安心です。

今回の例も、

  • 30以上(かなり暑い)
  • 20以上(過ごしやすい)
  • 10以上(ひんやり)
  • それ以外(寒い)

という順番だから、きれいに分類できます。

「よく当たる条件を上に」の考え方

if~else if~else~は、上から順番に判定します。
だから、実務っぽい話をすると

  • よく起きるケースを上
  • まれなケースを下

に置くと、平均的に判定回数が減って少し効率が上がります。

ただし、まず優先なのは 正しい条件の順番
速さよりも、間違えない並びを作るほうが大切です。