
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ステップで組み立てるとミスが減ります。
