ここでは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 の順番には気をつけましょう。
以上です。
ではまた。