
6日でできる 新C言語入門|if ~ else 文
条件が変われば、動きも変わる。
if ~ else 文を身につけて、判断できるC言語プログラムを書けるようになろう。
C言語では、上から順番に処理を実行するだけでなく、条件によって処理の流れを切り替えることができます。その代表的な構文が、if ~ else 文です。
たとえば、入力された数値が0以上ならあるメッセージを表示し、そうでなければ別のメッセージを表示する、といった処理はとてもよく使われます。こうした条件に応じた判断は、実際のプログラムの中で頻繁に登場します。点数判定、入力チェック、メニュー選択、エラー判定など、幅広い場面で活躍するのが条件分岐です。
if ~ else 文は、条件が成り立つときの処理と、成り立たないときの処理を1セットで書けるところが大きな特徴です。プログラムに「はい」と「いいえ」の判断をさせるイメージで考えると、ぐっと分かりやすくなります。
ここでは、if ~ else 文の基本的な書き方、条件式の考え方、フローチャートでの見方、サンプルプログラムの流れ、よくあるミスや注意点まで、順を追ってやさしく解説していきます。
if ~ else 文は「条件が成り立つかどうか」で処理を分ける
if ~ else 文は、ある条件が真か偽かを判定して、実行する処理を切り替えるための構文です。
基本の考え方はとてもシンプルです。
条件が成り立つなら if の中の処理を実行し、成り立たないなら else の中の処理を実行します。
たとえば、次のような判断ができます。
| 判定したいこと | 条件式の例 | 真のときの処理 | 偽のときの処理 |
|---|---|---|---|
| 値が0以上か | num >= 0 | 0以上ですと表示 | 負の数ですと表示 |
| 点数が合格点か | score >= 60 | 合格ですと表示 | 不合格ですと表示 |
| 偶数かどうか | number % 2 == 0 | 偶数ですと表示 | 奇数ですと表示 |
このように、if ~ else 文は「条件に応じて2通りの動きをさせたい」ときにぴったりです。
図:if ~ else 文の基本的な流れ

この図から分かること
if ~ else 文では、まず条件式を判定し、その結果によって進む方向が変わります。
条件が真なら if 側の処理、偽なら else 側の処理が実行されます。
この流れをイメージできるようになると、プログラムを読んだときにも、どちらの処理が実行されるのかを追いやすくなります。
if ~ else 文の基本構文
if ~ else 文の基本構文は次の通りです。
if (条件式) {
条件が真のときに実行する処理
} else {
条件が偽のときに実行する処理
}この構文で大事なのは、丸かっこの中に条件式を書くこと、そして処理のまとまりを中括弧で囲むことです。
それぞれの役割を整理すると、次のようになります。
| 要素 | 役割 |
|---|---|
| if | 条件が成り立つかを判定する |
| 条件式 | 真か偽かを判断する式 |
| { } | 実行する処理の範囲を示す |
| else | 条件が成り立たなかった場合の処理を書く |
たとえば、num >= 0 という条件式は、num が0以上なら真、そうでなければ偽になります。
つまり、0も正の数とは別ですが、この条件では 0以上 というグループに含まれます。
条件式でよく使う比較演算子
if ~ else 文では、条件式の中で比較演算子を使って値を比べます。
比較演算子は、値が大きいか、小さいか、等しいかなどを判定するための記号です。
| 演算子 | 意味 | 使用例 |
|---|---|---|
| > | より大きい | a > 0 |
| >= | 以上 | a >= 0 |
| < | より小さい | a < 0 |
| <= | 以下 | a <= 0 |
| == | 等しい | a == 0 |
| != | 等しくない | a != 0 |
ここで特に気をつけたいのが、== と = の違いです。
- == は、等しいかどうかを調べる比較
- = は、値を代入する記号
たとえば、if (a == 0) は正しい条件式ですが、if (a = 0) と書くと意味が変わってしまいます。
このミスはとても多いので、条件を比べるときは == を使うと意識しておくと安心です。
フローチャートで見ると、if ~ else 文の考え方が分かりやすい
条件分岐は文章だけで理解することもできますが、フローチャートで見ると流れがつかみやすくなります。
フローチャートでは、条件判定はひし形で表すのが一般的です。
そのひし形から、はい と いいえ のように2つの道が分かれ、それぞれ別の処理へ進みます。
if ~ else 文は、まさにこの考え方をそのままコードにしたものです。
プログラムを書き慣れていないうちは、頭の中で簡単なフローチャートを思い浮かべながら考えると理解しやすくなります。
サンプルプログラムで if ~ else 文を見てみよう
では、実際に整数を入力し、その値が0以上かどうかを判定するプログラムを見てみましょう。
今回は、もとの内容を少しアレンジして、入力された値が10以上かどうかを判定する例で説明します。
プロジェクト/ファイル名: Lesson20_1/main.c
#include <stdio.h>
int main(void) {
int num;
// 整数を入力してもらう
printf("整数を入力してください:");
scanf("%d", &num);
// 入力値が10以上かどうかを判定する
if (num >= 10) {
printf("入力した値は、10以上です。\n");
} else {
printf("入力した値は、10未満です。\n");
}
return 0;
}実行結果
整数を入力してください:15
入力した値は、10以上です。
整数を入力してください:4
入力した値は、10未満です。このプログラムでは、まず scanf でキーボードから整数を受け取り、それを num に代入しています。
そのあとで、if (num >= 10) という条件式を評価し、条件が成り立つかどうかで表示するメッセージを分けています。
このサンプルプログラムの流れを丁寧に見る
このプログラムの流れを、順番に追ってみましょう。
1. 変数を用意する
int num;ここでは、整数を入れるための変数 num を用意しています。
2. 入力を受け取る
printf("整数を入力してください:");
scanf("%d", &num);printf で案内メッセージを表示し、scanf で入力された整数を num に読み込みます。
scanf では、変数 num の前に & を付けています。これは、num の場所を指定するためです。
3. 条件を判定する
if (num >= 10)ここで、num が 10以上かどうかを調べています。
- num が 15 なら真
- num が 4 なら偽
となります。
4. 条件に応じて処理を分ける
if (num >= 10) {
printf("入力した値は、10以上です。\n");
} else {
printf("入力した値は、10未満です。\n");
}条件が真なら、10以上です と表示されます。
条件が偽なら、10未満です と表示されます。
図:サンプルプログラムの判定の流れ

この図から分かること
この図から分かるのは、入力値そのものは1つでも、その値が条件に合うかどうかで出力が変わるということです。
15 のように条件を満たす値なら if 側へ進み、4 のように条件を満たさない値なら else 側へ進みます。
これが if ~ else 文の基本的な働きです。
scanf、printf、if、else の役割を整理しよう
サンプルプログラムに出てきた主な要素を表にまとめると、次のようになります。
| 命令・要素 | 説明 |
|---|---|
| if | 条件が真のときに処理を実行する |
| else | if の条件が偽のときに処理を実行する |
| scanf | キーボードから入力を受け取る |
| printf | メッセージや値を表示する |
| >= | 左辺が右辺以上かどうかを判定する |
こうして見ると、if ~ else 文は単独で使うというよりも、入力や表示の処理と組み合わせながら使うことが多いと分かります。
Visual Studio で scanf を使うときの注意
Visual Studio 系の環境では、scanf を使うと警告が表示されることがあります。
これは scanf が安全性の面で注意を促される関数として扱われるためです。
学習用のサンプルでは scanf を使うことが多いですが、環境によっては SDLチェック の設定を見直す必要がある場合があります。
ただし、この記事では if ~ else 文の理解を中心にしているため、ここでは 入力を受け取る関数の1つ という位置づけで押さえておけば十分です。
大切なのは、if ~ else 文が「受け取った値をもとに判断している」という点です。
else があると「条件に合わなかった場合」もはっきり書ける
if 文だけでも条件分岐はできますが、else があることで、条件に合わなかった場合の処理も明確に書けます。
たとえば、if だけを書いた場合はこうなります。
if (num >= 10) {
printf("10以上です。\n");
}この場合、条件が偽なら何も起こりません。
それでも問題ない場面はありますが、条件に合わなかったときの動きも必要なら else を使うほうが分かりやすいです。
if ~ else 文にすると、真の場合と偽の場合の両方が揃うので、プログラムの意図が伝わりやすくなります。
else if を使うと、3通り以上の分岐も書ける
if ~ else 文は2通りの分岐が基本ですが、さらに else if を加えると、3通り以上の条件分岐も書けます。
たとえば、値が正か、0か、負かを分けたい場合は、次のように書けます。
if (num > 0) {
printf("正の数です。\n");
} else if (num == 0) {
printf("0です。\n");
} else {
printf("負の数です。\n");
}このように、条件を段階的に増やしていくことで、より細かい判定ができるようになります。
ただし、今回の中心は if ~ else 文の基本です。
まずは、真のときと偽のときで2通りに分ける形をしっかり理解することが大切です。
中括弧は省略できても、付ける習慣が安心
C言語では、if や else のあとに実行する処理が1文だけなら、中括弧を省略できます。
たとえば、次のような書き方も文法上は可能です。
if (num >= 10)
printf("10以上です。\n");
else
printf("10未満です。\n");ただし、この書き方は読み手が見落としやすく、あとから処理を追加したときにミスの原因になることがあります。
そのため、学習段階では1文だけでも中括弧を付ける習慣をつけるのがおすすめです。
中括弧を付けると、どこからどこまでが if 側の処理で、どこからどこまでが else 側の処理なのかがはっきりします。
よくある間違いと注意点
if ~ else 文では、初心者がつまずきやすいポイントがいくつかあります。
ここを先に知っておくと、ミスを減らしやすくなります。
| よくある間違い | 内容 |
|---|---|
| = と == を間違える | 比較には == を使う |
| else の書き忘れ | 偽のときの処理が必要なら else を付ける |
| 中括弧の対応ミス | { と } の数が合っていないとエラーになりやすい |
| 条件式の意味を取り違える | >= と > の違いに注意する |
| scanf の & を忘れる | 入力が正しく変数に入らない |
特に、次の2つはよくあるポイントです。
= と == の違い
- = は代入
- == は等しいかどうかの比較
条件式では、値を比べるので == を使います。
> と >= の違い
- は より大きい
- = は 以上
0を含めたいのか含めたくないのかで、条件式は変わります。
num >= 0 なら 0を含みますが、num > 0 なら 0は含みません。
フローチャートとコードを結びつけて考えると理解しやすい
if ~ else 文を理解するときは、コードだけを見るより、フローチャートの流れと対応させて考えるのがおすすめです。
- 条件を判定する部分 → ひし形
- 真なら進む道 → if
- 偽なら進む道 → else
このように結びつけると、コードの構造が見えやすくなります。
とくに、複雑な分岐を学んでいくときには、この考え方が役立ちます。
図:if ~ else 文とフローチャートの対応

この図から分かること
この図から分かるのは、if ~ else 文はフローチャートの条件分岐をそのままコードに置き換えたような構造になっているということです。
条件判定があり、その結果によって2つの道に分かれる、という考え方がそのまま反映されています。
図とコードを対応させて理解すると、条件分岐の仕組みがかなりつかみやすくなります。
if ~ else 文は、実用的なプログラムへの第一歩
if ~ else 文を使えるようになると、プログラムは単なる順番処理から、一歩進んだ判断処理へと広がります。
たとえば、次のような場面で使えます。
| 活用例 | 使い方のイメージ |
|---|---|
| 点数判定 | 合格か不合格かを分ける |
| 入力チェック | 範囲内かどうかを調べる |
| 正負判定 | 0以上か負の数かを分ける |
| 偶数奇数判定 | 余りを使って判断する |
| エラー処理 | 条件に合わない入力に応じて表示を変える |
このように、if ~ else 文はとても基本的でありながら、実際のプログラムで何度も登場する大事な構文です。
まずは、条件が真なら if、偽なら else という基本の流れをしっかり押さえましょう。
そのうえで、比較演算子や else if の使い方も少しずつ覚えていくと、プログラムでできることがどんどん増えていきます。
