
C言語のきほん|条件で分岐する
if は「条件が当たったときだけ動くスイッチ」!0 と 0以外の判定を押さえて、分岐の基本を身につけよう。
プログラムって、ただ上から順に処理するだけじゃなくて、「状況に応じて動きを変える」ことがとても多いです。
たとえば、
- 入力が正しいときだけ計算する
- パスワードが一致したらログインする
- 在庫が足りないなら購入できない
みたいな判断ですね。こういう動きを 選択構造 と呼びます。
C言語では、選択構造を実現する代表として
- 条件が真のときだけ実行する if
- 値に応じて分岐先を切り替える switch
があります。この節ではまず、基本中の基本である if 文 をしっかり理解していきます。
if 文は「真のときだけ実行する」
if は、条件が成り立つときだけ処理を実行して、成り立たないときはその処理を飛ばして次へ進みます。
if 文の基本構文
if(条件式){
文;
}条件式が 真 のときだけ、ブロック { } の中が実行されます。
条件式の判定ルール(0 と 0以外)
C言語の条件判定は、とても重要なルールがあります。
| 条件式の値 | 判定 |
|---|---|
| 0 | 偽(false) |
| 0以外(1, -1, 100 など) | 真(true) |
この「0以外は全部真」が最初は不思議に感じるけど、慣れるとすごく便利です。
そして実際は、次のような比較演算子を使って 1 か 0 を作ることが多いです。
- ==, !=(等しい、等しくない)
- <, <=, >, >=(大小)
- &&, ||, !(条件の組み合わせ)
これらは結果として「真なら1、偽なら0」を作ってくれます。
ブロック { } と字下げ(読みやすさの基本)
if の中に書く処理が1行だけなら、{ } を省略できます。
ただ、初心者のうちは 1行でも { } を付けるのがとてもおすすめです。
理由は「読み間違いを防げる」からです。
例:字下げもセットで
字下げは動作には関係ないですが、読みやすさに直結します。
制御の流れが見えるように、if の中はインデント(字下げ)を付けます。
サンプルプログラム
「入力が負の値だったら注意メッセージを出す」プログラム例です。
ファイル名:8_1_1.c
#include <stdio.h>
int main(void)
{
int temp;
printf("気温を入力してください > ");
scanf("%d", &temp);
/* 0未満なら注意メッセージを出す */
if (temp < 0) {
printf("寒いので手袋があると安心です。\n");
}
printf("入力された気温は%dです。\n", temp);
return 0;
}このプログラムは、
- temp が 0未満ならメッセージを表示
- 0以上なら何も表示せず次へ
という動きになります。if は「当たったときだけ実行する」動きをきれいに表現できます。
条件式を読み解く(例:temp < 0)
if (temp < 0) の意味は、「temp が 0 より小さいなら真」です。
真になるとブロック内が実行されます。
| 入力 | temp < 0 の結果 | 動作 |
|---|---|---|
| -5 | 1(真) | メッセージが出る |
| 0 | 0(偽) | メッセージは出ない |
| 8 | 0(偽) | メッセージは出ない |
この「条件式が 1/0 を返す」という感覚がつかめると、分岐が一気に理解しやすくなります。
超重要注意:== と = を間違えない
これは if で一番やりがちなミスです。
- == は比較(等しいか?)
- = は代入(入れる)
しかも、= を書いてもコンパイルエラーにならないことがあるので厄介です。
間違い例のイメージ
たとえば「0かどうかを調べたい」つもりで、
if (n = 0)
と書くと、これは「n に 0 を代入する」になります。
そして代入式全体の値は 0 なので、条件は常に偽になり、if の中が一切実行されなくなります。
正しい書き方
if (n == 0)
です。
慣れるまでは、if の条件に = が見えたら「代入になってない?」と疑うクセをつけると安心です。
