if文

ここではif文による条件分岐をさせてみましょう。
「もし宝くじが当たったら、会社やめる。」の “もし” の部分です。

動かしてみよう

では、サンプルコードを動かしてみましょう。
入力された数字が5より大きいか小さいかを判定するプログラムです。
入力欄に数字をいれて、実行ボタンを押してください。

実行できましたか。
何パターンか異なる数字を入れての実行もしてみてください。
入力した数字によって、出力結果が変わったと思います。

解説

if文の基本的な使い方は下記です。
条件式が成立した場合に、{ }内の処理を実行します。

if( 条件式 ) { 処理 }

if文は else if と else によって、機能を拡張することができます。

if( 条件式1 ) { 処理1 }
else if( 条件式2 ){ 処理2 } /* 省略可能。複数回書ける。 */
else if( 条件式3 ){ 処理3 } /* 省略可能。複数回書ける。 */
else { 処理4 } /* 省略可能。1回だけ書ける。 */

最初のif文が不成立だった場合、else if の処理をおこないます。
if, else if がすべて不成立だった場合、else の処理をおこないます。
else if や else はどちらかが無くても問題ありません。
else if は複数回書くこともできますが else は1回だけです。

少しイメージが湧きにくいかもしれないので、現実世界での例で考えてみましょう。
外出前の選択肢として、「すでに雨が降っているならカッパを着る。これから雨が降りそうなら傘を持つ。天気がよさそうならカッパも傘もいらない。」という判断をするシーンがあるとします。
それをif文により表現すると、下記のようになります。

if( 雨が降っている ) { カッパを着て出かける }
else if( 雨が降りそう ){ 傘を持って出かける }
else { 手ぶらで出かける }

「もし〜〜だったら、xxxxする。そうでなかったら、yyyyする。」と羅列しているだけですね。

関係演算子

if文内の条件式に使える記述について下表に示します。
これらの記述は関係演算子と呼ばれます。

関係演算子一覧
コード上の表現 意味
a == b a と b は等しい
a != b a と b は等しくない
a > b a は b より大きい
a >= b a は b 以上
a < b a は b より小さい
a <= b a は b 以下

等号の関係演算子が = を2個書く点について、気をつけてください。
(のちほど注意点としても述べます。)

論理演算子

現実世界では、複数の条件をもとに物事を判断することが多々あると思います。
C言語では論理演算子を用いることによって、複数の条件による判断をおこなわせることができます。

論理演算子一覧
コード上の表現 意味
A && B A と B が両方成立
A || B A と B のどちらかが成立(両方成立も含む)

例で考えてみましょう。
現実において「友人と自分の所持金が各自5000円以上あったら焼肉に行こう。」という状況があったとします。
その場合のプログラムは下記になります。

if( (自分の所持金 >= 5000) && (友人の所持金 >= 5000) ) { 焼肉に行く }

もしくは「友人と自分のどちらかが10000円以上もってたら焼肉に行こう。」という状況があったとします。(きっとオゴリですね。)
その場合のプログラムは下記になります。

if( (自分の所持金 >= 10000) || (友人の所持金 >= 10000) ) { 焼肉に行く }

&& と || は記号を2個続けて書く必要がある点に注意しましょう。

注意点

等号(==)と代入(=)に気をつけよう

等しいかどうかを判定する場合、== という風に = を2個つづけて書く必要があります。
= が1つだと代入処理になってしまうので、気をつけてください。
コンパイラではビルドエラーになりませんので、各自で注意する必要があります。

if( a = b ) { 処理 }

と間違ってしまった場合、

a = b;
if( a ) { 処理 }

というコードと同じ意味になります。

つまり、aとbが同じ場合に処理をさせたいにも関わらず、実際には b が 0 でない場合に処理をしてしまう動作となります。

上から実行される

最初の解説(こんにちは、世界。)にて、プログラムはmain関数を上から順番に実行すると説明しました。
それはif文においても同様です。

「5000円あったら焼肉に行く。1000円あったらラーメンに行く。そうじゃなかったら何も食べない。」という状況を考えてみましょう。
この場合、下記のプログラムは正しく動作します。

if( money >= 5000 ) { 焼肉 }
else if( money >= 1000) { ラーメン }
else { 何も食べない }

しかし if と else if の順番を入れ替えた次のプログラムは、期待通りに動作しません。

if( money >= 1000 ) { ラーメン }
else if( money >= 5000) { 焼肉 } /* 先にラーメンに決まるので実行されない */
else { 何も食べない }

5000円あってもラーメンに行くことになります。
優先的な条件から先に判定するようにしましょう。

まとめ

まとめです。

  • if により条件判定ができます。
  • else if や else によって、多数の条件分岐が実現できます。
  • = と書かないように気をつけましょう。== です。
  • if と else if の順番には気をつけましょう。

以上です。
ではまた。

タイトルとURLをコピーしました