if 文

If 文を用いるとプログラム中にとある条件に応じて分岐を行うことができます。

if

次の例では printf の内容が表示されます。

int main(){
    if (4 > 3) {
        printf("4 は 3 より大きいです。\n");
    }
}

次の例では何も表示されません

int main(){
    if (1 == 2) {
        printf("1 と 2 は等しいです。\n"); // !!!表示されない!!!
    }
}

else

条件に当てはまらなかった場合について書きたい場合は次のようにもかけますが、面倒ですよね

int main(){
    if (1 == 2) {
        printf("1 と 2 は等しいです。\n"); // !!!表示されない!!!
    }
    if (1 != 2) {
        printf("1 と 2 は等しくありません。\n"); // 出力される
    }
}

そのような場面でelseを使います。

int main(){
    if (1 == 2) {
        printf("1 と 2 は等しいです。\n"); // !!!表示されない!!!
    } else {
        printf("1 と 2 は等しくありません。\n"); // 出力される
    }
}

このように書くことで if の条件に当てはまらなかった場合について記述することができます。これは見た目が良いだけでなくどちらか片方だけを変えてしまったときに、あとからとても気が付きにくいバグになってしまうことを予防することにも繋がりますね。

else if

次のような書き方で複数の条件について確認することができます。

int main(){
    if (1 == 2) {
        printf("1 と 2 は等しいです。\n"); // !!!表示されない!!!
    } else if (1 == 3) {
        printf("1 と 3 は等しいです。\n"); // !!!表示されない!!!
    } else {
        printf("1 と 2, 1 と 3 は等しくありません。\n"); // 出力される
    }
}

入力の値で分岐

int main(){
    int input;
    scanf("%d", &input); //値を入力

    if (input == 1) {
        printf("入力は1です!\n");
    } else if (input == 2) {
        printf("入力は2です!\n");
    } else {
        printf("入力は1でも2でもありませんでした\n");
    }
}

条件の取り扱い

C 言語では条件の表現が少し特殊です。条件は数値として表され、0 は偽、それ以外は真を表すようになっています。そのため、次のような条件は常に真となります。

int main(){
    if (1) {
        printf("真\n"); // !!!表示される!!!
    } else {
        printf("偽\n");
    }
}

今後このような表現を見かけることもあるかと思うのでその時は条件が 0 かそれ以外かで表現されていることを思い出しましょう。

余談 else if は存在しない

C 言語の規約にはelse ifという構文は存在しません。説明にもあった通りつける構文なのになぜでしょう?

if 文は次のような定義がされています。

if (条件) 文
// もしくは
if (条件) 文 else 文

つまりこのように見えていたelse if文は

int main(){
    if (...) {
        ...
    } else if (...) {
        ...
    } else {
        ...
    }
}

実はこのような解釈がされているのです。

int main(){
    if (...) {
        ...
    } else {
        if (...) {
            ...
        } else {
            ...
        }
    }
}

実用上は特に気にすることはないので余談としていますが面白くないでしょうか?

参考:Stackoverflow: Does an else if statement exist?