if 文は、複数の制御フローが可能な選択ステートメントです。
if
文 を使用すると、指定されたテスト式 (暗黙的に bool に変換される)
が true に評価されたときに、ステートメントを条件付きで処理することができます。
bool への暗黙的な変換が失敗した場合は、プログラムが不適格です。
C では、if 文を使用すると、
指定されたテスト式の評価が非ゼロ値になった場合に、ステートメントを条件付きで処理することができます。
テスト式は、算術型またはポインター型でなければなりません。
オプションで、if 文で else 節を指定することができます。 テスト式の評価が false (または C では、ゼロ値) になり、else 節がある場合、else 節に関連付けられているステートメントが実行されます。テスト式の評価が true になった場合、その式に続くステートメントが実行され、else 節は無視されます。
if 文の形式は、次のとおりです。
>>-if--(--expression--)--statement--+-----------------+-------->< '-else--statement-'
if 文がネストされていて、else 節が存在する場合、指定された else は、同じブロック内の直前の if 文に関連付けられます。
任意の選択ステートメント (if、switch) に続く単一のステートメントは、 オリジナルのステートメントを含んでいる複合ステートメントとして扱われます。 結果として、そのステートメントで宣言されたすべての変数は、if 文の後、 スコープの外にあります。 次に例を示します。
if (x) int i;
は、以下と同等です。
if (x) { int i; }
変数 i は、if 文内でのみ可視です。 同じ規則が if 文の else 部分にも適用されます。
if 文の例
以下の例では、score の値が 90 以上であ る場合に、grade が A という値を受け取るようにします。
if (score >= 90) grade = 'A';
以下の例では、number の値が 0 またはそれ以上である場合 に Number is positive と表示します。 number の値が 0 より小さい場合には、 Number is negative と表示します。
if (number >= 0) printf("Number is positive¥n"); else printf("Number is negative¥n");
以下の例は、ネストされた if 文を示しています。
if (paygrade == 7) if (level >= 0 && level <= 8) salary *= 1.05; else salary *= 1.04; else salary *= 1.06; cout << "salary is " << salary << endl;
以下の例は、else 節を持たない、ネストされた if 文を示しています。 else 節は、常に、最も近い if 文に関連付けられるため、 特定の else 節を強制的に正しい if 文に関連付けるには、 中括弧が必要なことがあります。 この例では、中括弧を省略すると、else 節は、 ネストされた if 文に関連付けられることになります。
if (kegs > 0) { if (furlongs > kegs) fpk = furlongs/kegs; } else fpk = 0;
以下の例は、else 節の中にネストされた if 文を示しています。 この例では、複数の条件がテストされます。 テストは、それらの条件が書かれている順序で行われます。 1 つのテストが非ゼロ値に評価されると、 ステートメントが実行され、if 文全体が終了します。
if (value > 0) ++increase; else if (value == 0) ++break_even; else ++decrease;
関連参照