if文は条件分岐を可能にする、最も基本となる制御文の1つです。もし条件式Xを満たす(真)ならYを実行するという使い方で、下記はそのもっとも単純な例です。
[基本形]
if (条件式) {
...
}
[例]
if (x == 0) {
// xが0ならyを0にする
y = 0;
}
目次
関係演算子
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以下のとき真。 |
条件式を満たす条件
if文の条件式には、正しくは上の表の関係演算子を用いる必要はありません。if文が条件式を満たすのは、条件式の結果が真のときです。そして条件式の結果が真とは、「0ではない」状態を表します。これを例で示すと、下記のようになります。
if (1) {
// 必ず実行される
}
if (0) {
// 絶対に実行されない
}
論理演算子
if文の条件式には、複数の条件を設定することができます。
スクロールできます
演算子 | 記述例 | 内容 |
---|---|---|
&& | A && B | 論理積(AND)。条件式AとBが共に真のときに真。 |
|| | A || B | 論理和(OR)。条件式AまたはBが真のときに真。 |
! | !A | 否定(NOT)。条件式Aを満たさないときに真。 |
if ((a == 0) && (b == 0)) {
// "a = 0"かつ"b = 0"なら実行する
}
if ((a == 0) || (b == 0)) {
// "a = 0"または"b = 0"なら実行する
}
if (!(a == 0)) {
// aが0でなければ実行する
}
- 「&&」と「||」を含む3つ以上の論理演算子を組み合わせる場合、( )を設けて優先順位を明確にしてください。
// "a = 0 かつ b = 0" または "c = 0" なら真
if (((a == 0) && (b == 0)) || (c == 0))
// "a = 0" かつ "b = 0 または c = 0"なら真
if ((a == 0) && ((b == 0) || (c == 0)))
- 条件式は左のものから順に実行されます。そして途中で真偽が確定した場合、それ以降の判定は打ち切って実行されません。これを短絡評価(ショートサーキット)といいます。
// "a = 0"なら++bは実行されない
if ((a == 0) || (++b == 5)) {
...
}
複数の分岐(if-else文)
if文を用いることで、複数の分岐を発生させることができます。それがif-else文で、下記のように2分岐や3分岐以上の枝分かれが可能です。
if (a == 0) {
// aが0なら実行する
} else {
// aが0でなければ実行する
}
if (a == 0) {
// aが0なら実行する
} else if (a == 1) {
// aが1なら実行する
} else {
// aが0でも1でもなければ実行する
}
「==」と「=」の誤り
if文での等価演算子は「==」です。これを「=」にしてしまうという誤りが、C言語ではよくあります。なぜなら下記のように記述しても、コンパイラーはエラーを出さないからです。
if (a = b) {
// bが0でなければ実行される
}
if文かswitch文か
C言語にはif文以外にswitch文というものがあります。どちらを使うかは好みの問題で決めて構いませんが、迷うようであれば下記にしたがうといいでしょう。
- 分岐が2つならif文を使う。
- 分岐が4つ以上ならswitch文を使う。
- 今後の状況しだいでさらに分岐が増えていくなら、if文とポインターを使う。
ポインターの基礎から関数ポインターまで | C言語
プログラムで扱う変数の値は、メモリー上に格納されます。各変数はメモリー上のどこか(アドレス)に配置されていて、変数に値を代入するということはメモリー上の指定…