
6日でできる 新C言語入門|else if 文
条件が増えても、上から順に落ち着いて判定する。
else if 文を理解して、複数の分岐を分かりやすく書けるようになろう。
C言語の条件分岐では、if文やif ~ else文を使うことで、条件が成り立つ場合と成り立たない場合の処理を分けられます。しかし、実際のプログラムでは、2通りだけでは足りない場面もよくあります。
たとえば、入力された点数によって評価を分けたい場合、80点以上、70点以上、60点以上、それ以外というように、複数の条件を順番に判定したくなります。また、気温によって暑い、過ごしやすい、肌寒い、寒いと表示を変えたい場合にも、条件は2つだけでは表現しきれません。
このような複数の条件を扱うときに使うのがelse if文です。else if文を使うと、最初のif文で条件を判定し、当てはまらなければ次のelse if文でさらに別の条件を判定できます。どの条件にも当てはまらなかった場合は、最後のelse文でまとめて処理できます。
else if文の大切なポイントは、上から順番に条件を確認し、最初に成り立った条件の処理だけを実行することです。一度どこかの条件に当てはまると、それ以降のelse ifやelseは実行されません。そのため、条件を書く順番がとても重要になります。
この記事では、else if文の基本構文、処理の流れ、条件を書く順番、サンプルプログラム、scanf関数を使うときの注意点、フローチャートでの考え方、よくある間違いまで、C言語初心者にも分かりやすく解説していきます。
else if 文は複数の条件を順番に判定する構文
else if文は、3通り以上の分岐を作りたいときに使います。if文だけなら、条件が真のときの処理を書けます。if ~ else文なら、真のときと偽のときの2通りを書けます。そこにelse if文を加えると、さらに細かく条件を分けられます。
基本の形は次の通りです。
if (条件式1) {
条件式1が真のときの処理;
}
else if (条件式2) {
条件式2が真のときの処理;
}
else if (条件式3) {
条件式3が真のときの処理;
}
else {
どの条件にも当てはまらないときの処理;
}else if文は、必要に応じて複数書くことができます。条件が3つでも4つでも、判定したい内容に合わせて増やせます。
| 構文 | 役割 |
|---|---|
| if | 最初の条件を判定する |
| else if | 前の条件が成り立たなかった場合に、次の条件を判定する |
| else | どの条件にも当てはまらなかった場合の処理を書く |
| 条件式 | 真か偽かを判定する式 |
| { } | 条件に合ったときに実行する処理範囲を表す |
else if文は、条件を上から順番に見ていきます。最初に成り立った条件の処理が実行されると、その後ろにあるelse if文やelse文は実行されません。
図:else if 文は上から順番に条件を確認する

この図から分かること
この図から分かるのは、else if文では条件を上から順番に確認していくという点です。
条件1が成り立てば処理Aを実行し、条件2や条件3には進みません。条件1が成り立たない場合だけ、条件2を確認します。このように、else if文は複数の条件を順番に判定し、最初に当てはまった処理だけを実行する構造になっています。
if ~ else 文との違い
if ~ else文は、条件が成り立つ場合と成り立たない場合の2通りを分ける構文です。一方、else if文を使うと、3通り以上の分岐を作れます。
| 書き方 | 分岐の数 | 向いている場面 |
|---|---|---|
| if文 | 条件が真の場合だけ | 条件に合ったときだけ処理したい |
| if ~ else文 | 2通り | 真の場合と偽の場合を分けたい |
| if ~ else if ~ else文 | 3通り以上 | 複数の条件を順番に判定したい |
たとえば、数値が10以上かどうかだけを判定するならif ~ else文で十分です。しかし、点数に応じてA、B、C、Dのように複数の評価を分けたい場合は、else if文が向いています。
else if文を使うと、条件ごとに処理を整理して書けるため、複雑な分岐でも読みやすくなります。
else if 文の処理は上から順番に決まる
else if文で特に大切なのは、条件の順番です。C言語は、上に書かれた条件から順番に判定します。そして、最初に真になった条件の処理だけを実行します。
たとえば、点数を判定する場合を考えてみます。
if (score >= 80) {
printf("評価A\n");
}
else if (score >= 70) {
printf("評価B\n");
}
else if (score >= 60) {
printf("評価C\n");
}
else {
printf("評価D\n");
}この場合、scoreが85なら、最初のscore >= 80が真になります。そのため評価Aが表示され、後ろのscore >= 70やscore >= 60は判定されません。
scoreが75なら、score >= 80は偽ですが、score >= 70は真になります。そのため評価Bが表示されます。
| scoreの値 | 判定の流れ | 実行される処理 |
|---|---|---|
| 85 | score >= 80が真 | 評価A |
| 75 | score >= 80は偽、score >= 70が真 | 評価B |
| 65 | score >= 80は偽、score >= 70は偽、score >= 60が真 | 評価C |
| 50 | すべての条件が偽 | 評価D |
このように、else if文では上から順番に条件を確認するため、条件の並べ方がとても大切です。
条件の順番が重要になる理由
else if文では、条件の順番を間違えると、思った通りの結果にならないことがあります。
たとえば、点数判定で先にscore >= 60を書いてしまうと、80点以上の点数もscore >= 60に当てはまってしまいます。
if (score >= 60) {
printf("評価C以上\n");
}
else if (score >= 80) {
printf("評価A\n");
}この書き方では、scoreが90でも最初のscore >= 60が真になるため、後ろのscore >= 80には進みません。その結果、評価Aとして処理されません。
範囲を段階的に判定するときは、より厳しい条件、または範囲が狭い条件を先に書くと分かりやすくなります。
| 条件の書き方 | 考え方 |
|---|---|
| score >= 80を先に書く | 高い評価から順番に判定できる |
| score >= 70を次に書く | 80未満70以上を判定できる |
| score >= 60をその次に書く | 70未満60以上を判定できる |
| elseを最後に書く | どの条件にも当てはまらない場合を処理できる |
else if文は、条件を書いた順番に意味があります。ただ条件を並べるだけではなく、どの条件を先に判定すべきかを考えることが大切です。
else if 文を使ったサンプルプログラム
次に、入力された気温によってメッセージを変えるプログラムを見てみましょう。複数の条件をelse if文で判定します。
プロジェクト/ファイル名: Lesson21_1/main.c
#include <stdio.h>
int main(void) {
int temperature;
// 気温を入力してもらう
printf("気温を入力してください:");
scanf("%d", &temperature);
// 気温に応じてメッセージを切り替える
if (temperature >= 30) {
printf("判定:暑い日です。\n");
}
else if (temperature >= 20) {
printf("判定:過ごしやすい日です。\n");
}
else if (temperature >= 10) {
printf("判定:少し肌寒い日です。\n");
}
else {
printf("判定:寒い日です。\n");
}
return 0;
}実行結果
気温を入力してください:32
判定:暑い日です。
気温を入力してください:24
判定:過ごしやすい日です。
気温を入力してください:15
判定:少し肌寒い日です。
気温を入力してください:5
判定:寒い日です。このプログラムでは、temperatureの値を上から順番に判定しています。
30以上なら暑い日です。20以上30未満なら過ごしやすい日です。10以上20未満なら少し肌寒い日です。どの条件にも当てはまらない場合、つまり10未満なら寒い日です。と表示します。
サンプルプログラムの判定の流れ
このサンプルプログラムでは、次の順番で条件が確認されます。
| 条件式 | 判定される内容 | 実行される処理 |
|---|---|---|
| temperature >= 30 | 30度以上か | 暑い日です。 |
| temperature >= 20 | 20度以上か | 過ごしやすい日です。 |
| temperature >= 10 | 10度以上か | 少し肌寒い日です。 |
| else | 上記以外 | 寒い日です。 |
たとえば、temperatureが24の場合を考えてみましょう。
最初にtemperature >= 30を確認します。24は30以上ではないため偽です。次にtemperature >= 20を確認します。24は20以上なので真です。そこで過ごしやすい日です。と表示され、その後ろのtemperature >= 10やelseは実行されません。
| 入力値 | 30以上 | 20以上 | 10以上 | 結果 |
|---|---|---|---|---|
| 32 | 真 | 判定しない | 判定しない | 暑い日です。 |
| 24 | 偽 | 真 | 判定しない | 過ごしやすい日です。 |
| 15 | 偽 | 偽 | 真 | 少し肌寒い日です。 |
| 5 | 偽 | 偽 | 偽 | 寒い日です。 |
この表を見ると、最初に真になった条件だけが実行されることが分かります。
図:気温判定プログラムの分岐イメージ

この図から分かること
この図から分かるのは、else if文では、複数の条件を上から順番に判定していくという点です。
32なら最初の条件で真になり、暑い日です。と表示されます。24なら最初の条件は偽ですが、次の条件が真になります。15ならさらに次の条件へ進みます。5の場合はどの条件にも当てはまらないため、elseの処理が実行されます。
scanf関数で入力を受け取る
サンプルプログラムでは、scanf関数を使ってキーボードから整数を入力しています。
scanf("%d", &temperature);この行では、入力された整数をtemperatureという変数に保存しています。%dは整数を読み取るための書式指定子です。&temperatureは、temperatureの保存場所を表します。
| 書き方 | 意味 |
|---|---|
| %d | 整数を入力する指定 |
| temperature | 変数の値 |
| &temperature | 変数temperatureの場所 |
| scanf("%d", &temperature); | 入力された整数をtemperatureに保存する |
scanf関数では、入力先の変数の前に&を付ける必要があります。これは、scanf関数が値そのものではなく、値を入れる場所を必要とするためです。
Visual Studio系の環境では、scanf関数を使うと安全性に関する警告が表示される場合があります。学習用のサンプルとしてscanf関数を使う場合は、開発環境の設定に応じてSDLチェックをいいえにする、scanf_s関数を使う、警告への対応方法を確認するなど、教材の方針に合わせて進めるとよいでしょう。
if、else if、else、scanf、printfの役割
else if文のサンプルでは、複数のC言語の基本要素が組み合わされています。それぞれの役割を整理しておきましょう。
| 命令・要素 | 説明 |
|---|---|
| if | 最初の条件を判定する |
| else if | 前の条件が偽だった場合に、次の条件を判定する |
| else | どの条件にも当てはまらなかった場合の処理を書く |
| scanf | 標準入力から値を受け取る |
| printf | 標準出力に文字列や値を表示する |
| >= | 左辺が右辺以上かどうかを判定する |
else if文は単独で使うだけでなく、入力処理や出力処理と組み合わせて使うことで、入力値に応じた判断ができるようになります。
elseは最後の受け皿になる
else if文では、最後にelseを書くことがあります。elseは、どの条件にも当てはまらなかった場合の処理を担当します。
今回の気温判定では、次のような意味になります。
else {
printf("判定:寒い日です。\n");
}これは、temperature >= 30でもなく、temperature >= 20でもなく、temperature >= 10でもない場合に実行されます。つまり、10未満のときの処理です。
elseを書いておくと、想定外や残りの範囲をまとめて処理できます。条件が複数ある場合でも、最後にelseを用意しておくと、どの条件にも当てはまらない場合の動きが明確になります。
ただし、必ずelseを書かなければならないわけではありません。どの条件にも当てはまらないときに何もしなくてよい場合は、elseを省略することもできます。学習段階では、分岐の流れを分かりやすくするためにelseまで書くと理解しやすいです。
else if文と独立したif文の違い
複数の条件を書くとき、else if文ではなく、if文を複数並べることもできます。しかし、動きは同じではありません。
if (temperature >= 30) {
printf("暑い日です。\n");
}
if (temperature >= 20) {
printf("過ごしやすい日です。\n");
}
if (temperature >= 10) {
printf("少し肌寒い日です。\n");
}このようにif文を独立して並べると、それぞれのif文が別々に判定されます。たとえばtemperatureが32の場合、30以上でもあり、20以上でもあり、10以上でもあるため、複数のメッセージが表示されてしまいます。
一方、else if文では、最初に真になった条件の処理だけが実行されます。
| 書き方 | 判定の特徴 |
|---|---|
| ifを複数並べる | すべての条件を個別に判定する |
| else ifを使う | 最初に真になった条件だけを実行する |
1つだけ結果を選びたい場合は、else if文を使うと分かりやすくなります。複数の条件に当てはまる可能性があり、それぞれの処理をすべて実行したい場合は、独立したif文を使うこともあります。
フローチャートで見るelse if文
else if文は、上から順番に条件を確認するフローチャートで表すと理解しやすくなります。
条件1が真なら処理Aへ進みます。条件1が偽なら条件2を確認します。条件2が真なら処理Bへ進みます。条件2も偽なら条件3を確認します。どれにも当てはまらなければelseの処理へ進みます。
このように、else if文は条件を階段のように順番に降りていくイメージで考えると分かりやすいです。
図:else if 文とフローチャートの対応

この図から分かること
この図から分かるのは、else if文のコードとフローチャートが同じ流れを表しているという点です。
ifで最初の条件を判定し、偽の場合だけ次のelse ifへ進みます。どの条件にも当てはまらなければ、最後のelseへ進みます。フローチャートとコードを対応させて見ると、複数条件の分岐も理解しやすくなります。
else if文でよく使う比較演算子
else if文の条件式では、比較演算子をよく使います。値の大小や等しさを調べるための記号です。
| 演算子 | 意味 | 使用例 |
|---|---|---|
| > | より大きい | temperature > 30 |
| >= | 以上 | temperature >= 30 |
| < | より小さい | temperature < 10 |
| <= | 以下 | temperature <= 10 |
| == | 等しい | menu == 1 |
| != | 等しくない | menu != 0 |
特に、等しいかどうかを調べるときは==を使います。=は代入なので、条件式の中で間違えて使わないように注意しましょう。
| 書き方 | 意味 |
|---|---|
| menu = 1 | menuに1を代入する |
| menu == 1 | menuが1と等しいかを判定する |
この違いはC言語の条件分岐でとても重要です。else if文でも、条件を比較するときは==を使います。
else if文でよくある間違い
else if文では、条件が複数になるため、書き方や順番のミスが起こりやすくなります。よくある間違いを整理しておきましょう。
| よくある間違い | 内容 |
|---|---|
| 条件の順番を間違える | 広い条件を先に書くと、後ろの条件まで進まない |
| =と==を間違える | 比較したいのに代入してしまう |
| elseを早い位置に書く | elseは最後に書く |
| 中括弧の対応を間違える | どの条件の処理か分かりにくくなる |
| ifを複数並べてしまう | 1つだけ選びたいのに複数の処理が実行される |
| scanfの&を忘れる | 入力値を正しく変数に保存できない |
else if文は、条件が多くなるほど読みやすさが重要になります。インデントを整え、条件の順番を意識し、どの範囲がどの処理なのかを分かりやすく書きましょう。
中括弧を付けて処理範囲を明確にする
C言語では、ifやelse ifやelseの中に1文だけ書く場合、中括弧を省略できることがあります。しかし、学習段階では中括弧を付ける習慣をおすすめします。
if (temperature >= 30) {
printf("暑い日です。\n");
}
else if (temperature >= 20) {
printf("過ごしやすい日です。\n");
}
else {
printf("寒い日です。\n");
}中括弧を付けることで、どこからどこまでがその条件の処理なのかがはっきりします。あとから処理を追加するときにも、ミスを防ぎやすくなります。
else if文は入力チェックにも使える
else if文は、点数や気温の判定だけでなく、入力チェックにも使えます。
たとえば、入力された年齢に応じてメッセージを変えたり、メニュー番号に応じて処理を選んだりできます。
| 使いどころ | 例 |
|---|---|
| 点数判定 | 点数に応じて評価を表示する |
| 気温判定 | 気温に応じてメッセージを変える |
| 年齢判定 | 年齢によって区分を表示する |
| メニュー選択 | 番号に応じて処理を選ぶ |
| 入力範囲チェック | 値が範囲内かどうかを調べる |
複数の条件から1つの結果を選びたい場合に、else if文はとても便利です。
条件を整理するとelse if文は読みやすくなる
else if文を書くときは、いきなりコードを書き始めるより、先に条件を表で整理すると分かりやすくなります。
今回の気温判定なら、次のように整理できます。
| 気温の範囲 | 表示する内容 |
|---|---|
| 30度以上 | 暑い日です。 |
| 20度以上30度未満 | 過ごしやすい日です。 |
| 10度以上20度未満 | 少し肌寒い日です。 |
| 10度未満 | 寒い日です。 |
この表をコードにすると、上から30以上、20以上、10以上、elseの順に書けばよいことが分かります。
条件が増えると頭の中だけで整理するのが難しくなります。先に表やフローチャートで考えてからコードにすると、間違いを減らせます。
else if文を使えると判断処理の幅が広がる
else if文を使えるようになると、C言語の条件分岐で扱える内容が大きく広がります。2通りだけでなく、複数の選択肢から1つを選ぶような処理を書けるようになるためです。
if文で最初の条件を判定し、else if文で次の条件を確認し、else文で残りの場合を処理する。この流れを理解しておけば、点数判定、入力チェック、メニュー処理、分類処理など、さまざまなプログラムに応用できます。
else if文では、上から順番に条件が判定され、最初に真になった処理だけが実行されます。この特徴をしっかり意識して、条件の順番を考えながら書くことが大切です。
まずは、条件を表に整理し、フローチャートで流れを確認し、短いサンプルプログラムで動きを試してみましょう。else if文に慣れると、C言語で書ける判断処理がぐっと増えていきます。
