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の値判定の流れ実行される処理
85score >= 80が真評価A
75score >= 80は偽、score >= 70が真評価B
65score >= 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 >= 3030度以上か暑い日です。
temperature >= 2020度以上か過ごしやすい日です。
temperature >= 1010度以上か少し肌寒い日です。
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 = 1menuに1を代入する
menu == 1menuが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言語で書ける判断処理がぐっと増えていきます。