【入門】C言語での if else の書き方とは

公開日:2020.12.02

スキルアップ
 

一番基本的な条件分岐の構文といえるのがif elseです。元の構文自体は単純ですが、使い方次第でさまざまな処理を書くことができます。ただし、入れ子でたくさん使うと複雑になっていくため、コードの書き方にも注意する必要があります。

今回はそんなif文について、C言語で書くためのポイントなどをご紹介します。

なお、C言語の基礎知識やif以外の構文の書き方については、以下の記事も併せてご参照ください。

C言語のif文の書き方

C言語のif文はifとelseを使って書くのが基本系です。条件に該当した場合、ifの後に書かれた処理を行い、該当しない場合はelseの後の処理を行います。

条件が複数ある場合はelse ifでifの後をつないでいき、最後にelse文を記載します。条件式は()の中に記載し、実行される処理は{}の中に記載します。改行やインデントはプログラムが正しく動くことに影響はありませんが、読みやすいコードにするためにある程度書き方が決まっているので覚えておきましょう。

C言語のif文の基本形

次のコードをサンプルに基本の書き方を説明します。このコードはaが5以下の場合、10以下の場合、それ以上の場合で分岐します。

if (a <= 5) {
   printf("if");
} else if (a <= 10) {
   printf("else if");
} else {
   printf("else");
}

このコードではaが5以下の数字であるときは『if』が出力されます。aが6から10の場合はelse ifの条件に該当するので『else if』が出力されます。aが10より大きいときはelseの処理に入り、『else』が出力されます。

ifの中の条件式に該当する場合(条件式がtrueの場合)に{}の中の処理が実行されます。該当しない場合(条件式がfalseの場合)はelseの{}の中の処理が実行されます。elseの記載は必須ではないので、処理を行わない場合はelseのブロック自体を記載しないこともあります。

複数の条件をつなぎたい場合はelse ifを使ってつないでいきます。たくさんの条件がつながると、読みづらくなるので、複雑な処理になってきた場合は別の処理で記載することも考えましょう。

気を付けたいのは条件の境界となる数字です。サンプルの場合はaが5のときと10のときが該当します。条件判定にイコールを入れるか入れないかで、どの処理が実行されるかが変わってしまうので注意しましょう。

うまくいかないパターン

処理は上から順番に行われます。次のサンプルのような場合はaが5以下でも、ifの処理に入っていきます。else if内の処理となる『else if』は出力されません。

if (a <= 10) {
   printf("if");
} else if (a <= 5) {
   printf("else if");
} else {
   printf("else");
}

処理が1行の場合、{}が省略可能

処理が簡単で1行しかない場合は、以下のサンプルのように{}を使わない形での記述も可能です。もちろん{}を使う形でも記述できますので、混在させないように注意しましょう。省略しているものとそうでないものが混在すると、ソースコードの可読性が落ちる場合があります。

if (a == b)
   printf("if");

if文で使用する演算子

if文では比較演算子と論理演算子の二つを主に使います。比較演算子は左右の値を比べた結果、論理演算子は式を評価した結果の真偽で処理を行うかを判定します。

比較演算子

C言語の比較演算子は以下の6パターンです。

==
イコールと読み、左右の値が等しいときにtrueとなります。プログラム上、イコール一つでは代入になってしまうので、条件判定をする際は必ず二つ並べます。
!=
ノットイコールと読み、左右の値が等しくないときにtrueとなります。他のプログラム言語ではノットイコールを『< >』で表記することもありますが、C言語では『!=』と記載します。
<
小なりと読み、右の値の方が大きいときにtrueとなります。
<=
小なりイコールと読み、右の値の方が大きい、または右の値と等しいときにtrueとなります。左右の値が等しいときの条件判定が、小なりと小なりイコールのときで異なるので注意しましょう。
>
大なりと読み、右の値の方が小さいときにtrueとなります。
>=
大なりイコールと読み、右の値の方が小さい、または右の値と等しいときにtrueとなります。小なりイコールのときと同様、イコールの扱いに気を付けましょう。

論理演算子

C言語の論理演算子は以下の3パターンがあります。

&&
論理積、AND(アンド)と呼ばれます。左と右の値がともに真の場合、trueとなります。
||
論理和、OR(オア)と呼ばれます。左または右の値が真の場合、trueとなります。
!
否定、NOT(ノット)と呼ばれます。値が偽の場合は真、真の場合は偽となります。

なお、気を付けたいのは左側から式が評価されていく点です。左側で真偽が決定してしまうと、右側の真偽を判定せずに処理が終了することになります。条件判定がうまくいかないときは、左側で真偽が確定してしまっていないか確認してみましょう。

例えば次のような記述では、左側の a < 10 がtrueになる場合、右側のb == 3 を処理しなくても if の条件がtrueになることが確定しますので、 b == 3 は判定されません。

if (a < 10 || b == 3) {
}

C言語のif文の使い方

条件分岐の多くない、通常のパターンでif文を書くと次のような形になります。条件分岐は分かりやすい形でコメントに残しておくと、修正しやすいコードが書けます。

if (a >= 5) {
    // aが5以上の場合の処理
} else if (a >= 7) {
    // aが7以上の場合の処理
} else {
    // それ以外の場合の処理
}

else ifでたくさんの条件をつないでいく場合は、次のようなコードになります。上から順番に処理されていくので、条件の記載順を間違えないようにしましょう。

if (a >= 5) {
    // aが5以上の場合の処理
} else if (a >= 7) {
    // aが7以上の場合の処理
} else if (a >= 10) {
    // aが10以上の場合の処理
} else {
    // aがそれ以外の場合の処理
}

否定の場合は次のような形でコードを書きます。例えば、aが5以外の全ての値に該当する場合はこのように記述します。

if (a != 5) {
}

入れ子(ifの中にif)にする場合

ifは入れ子にして使うことができます。入れ子にしてコードを書く場合、次のサンプルのような記述となります。

入れ子構造はコードが複雑になりがちなので、誤解を招かないためにもコメントで条件を書いたり、インデントでかっこの位置をそろえたりしておきましょう。プログラムは複数人で管理することも多く、メンテナンス性の高いコードにしておくことも重要です。

if (a >= 5) {
    // aが5以上の場合
    if (b <= 10) {
      // aが5以上でかつbが10以下の場合
    }
}

複数条件を設定する場合

複数条件を設定したい場合は入れ子でつないでいくよりも、論理演算子を使う方がすっきり記載できます。先の入れ子と合わせて使うと、ややこしい条件式になりかねないので、先に条件を整理してからプログラムに起こしていくと間違いがありません。

if (a >= 5 && b >= 5) {
    // aが5以上かつbが5以上の場合
}

if (a >= 5 || b >= 5) {
    // aが5以上 もしくはbが5以上の場合
}

C言語のif文 - 応用編

if文は少し変わった使い方もできます。

例えば、if(0) はif (false) if (NULL)などと同じく、実行されないif文となります。C言語では、0はfalseと同義です。そして、0以外はtrueとみなすので、上記は必ずfalseとなり、if文の中を通らない構文です。

完成したプログラムではほとんど使われない記載ですが、開発中に時々見られるコードです。例えば、デバッグ中に一旦値をfalseにして、処理を保留にしておくときに使われることがあります。実行すると必ずエラーが出るのが分かっている処理や、ログやファイルが出力されてしまう処理は、デバッグ中はfalseにして止めておきます。

if文は使いこなせるとプログラムが書きやすくなるのはもちろん、開発中も便利に使えます。少し調べると使用例もたくさん出てくるので、調べながら使えるようにしていきましょう。

if文は基本!しっかり理解しよう!

if文は簡単な構文ですが、条件の書き方次第でさまざまな使い方ができます。重ねて分かりやすく処理を作ることや、読みやすいプログラムを書くことにも注意しなければなりません。

こうした配慮ができるようになると、プログラマーとしての評価も高くなり、スキルのある人材として認めてもらえることにつながります。自分の希望する条件で働きたいときは、少しずつスキルアップを図り、就職に有利に働く要素をそろえましょう。

なお、AKKODiSでは、C言語のスキルを活用できる求人を多数用意しています。組み込み系のお仕事や回路設計など幅広いジャンルから選択が可能です。ぜひ一度ご確認ください。

(2020年12月現在)

AKKODiSコンサルティングに関するお問い合わせ