C言語のきほん|if~elseによる条件分岐

当たりならA、ハズレならB!if~else を使うと、分岐の意図がはっきり伝わるよ。

これまでの if は「条件が真のときだけ実行する」形でした。
でも実際のプログラムでは、条件が偽のときにも何かしたい場面がとても多いです。

たとえば、

  • 入力が範囲内ならOK、範囲外ならエラーメッセージ
  • パスワードが一致したらログイン、違ったら再入力を促す
  • 合格なら合格表示、不合格なら不合格表示

みたいに「どっちの場合も何かする」ことが自然ですよね。

そこで使うのが if~else
これは「もしAならB、そうでなければC」という2択の分岐を、読みやすく表現するための制御文です。

if~else の基本構文

if(条件式){
    文1;
}
else{
    文2;
}
  • 条件式が なら if ブロック(文1)を実行
  • 条件式が なら else ブロック(文2)を実行

どちらか一方だけが必ず実行される、というのがポイントです。

条件式の判定ルール(おさらい)

if の条件式は「真か偽か」で分岐します。C言語では次のルールでした。

条件式の値判定
0
0以外

普段は == や < などの比較演算子を使って、条件式が 1 か 0 になるように書くのが一般的です。

ブロック { } は両方に付けるのが安心

if も else も、1行だけなら { } を省略できます。
ただ、学習中は 必ず { } を付けるのがおすすめです。

理由は、見た目の勘違いでバグが入りやすいからです。
「ここまでが if の中」「ここからが else」という境界をはっきりさせるのが大事です。

サンプルプログラム

「入力された体温が平熱の範囲かどうか」を判定して、どちらの場合もメッセージを出すサンプルプログラムです。

ファイル名:8_4_1.c

#include <stdio.h>

int main(void)
{
    double temp;

    printf("体温(℃)を入力してください > ");
    scanf("%lf", &temp);

    /* 平熱の目安を 36.0〜37.0 として判定する */
    if (temp >= 36.0 && temp <= 37.0) {
        printf("平熱の範囲ですね。\n");
    } else {
        printf("平熱の範囲外です。体調に注意してください。\n");
    }

    return 0;
}

このプログラムは、入力された体温が

  • 36.0以上かつ37.0以下 → 平熱メッセージ
  • それ以外 → 注意メッセージ

という2択になります。

if~else は「どちらか必ず実行される」

if だけのときは「偽なら何もしない」でした。
if~else になると、偽の場合にも必ず else 側の処理が走ります。

条件が真条件が偽
if ブロック実行else ブロック実行

なので、入力チェックや判定結果の表示など「結果を必ず出したい」場面でとても便利です。

条件式を読み解く(temp >= 36.0 && temp <= 37.0)

ここも丁寧に読み替えると理解しやすいです。

  • temp >= 36.0:36.0以上?
  • temp <= 37.0:37.0以下?
  • &&:両方満たす?

つまり「36.0〜37.0の範囲に入っている?」という意味です。

境界値が含まれることに注意

= と <= を使っているので、36.0 も 37.0 も「範囲内」扱いになります。
もし「37.0は含めたくない」なら <= 36.9 のように境界を変える必要があります。

else は条件式が偽なら必ず入る

else は条件式の「偽」を担当します。

  • if の条件が偽だったときの処理を書く場所
  • ここに「エラーメッセージ」や「やり直しの案内」などを書くことが多い

たとえば入力の範囲チェックなら、

  • if:OKの処理
  • else:NGの処理(警告や終了)

という形にすると読みやすいです。

よくあるミス:条件が逆になってしまう

範囲チェックは、条件を間違えると意図と逆の分岐になります。
迷ったら数直線のイメージか、具体例を1つ入れて考えると安全です。

例:36.0〜37.0 を範囲内にしたいなら

  • 36.0 は範囲内にしたい → >=
  • 37.0 は範囲内にしたい → <=
  • 両方必要 → &&

この3ステップで組み立てるとミスが減ります。