コンテンツにスキップ

C言語/if

出典: フリー教科書『ウィキブックス(Wikibooks)』

はじめに

[編集]

C言語における条件分岐の中心となる制御構造が「if文」です。このセクションでは、if文の基本的な使い方を解説します。

if文の基本構文

[編集]

if文の基本構文は以下の通りです:

if (条件式) {
    // 条件式が真の場合に実行される文
}

条件式が真(0以外の値)と評価された場合のみ、波括弧内のコードブロックが実行されます。以下に簡単な例を示します:

#include <stdio.h>
int main() {
    int temperature = 25;
    
    if (temperature > 20) {
        printf("今日は暑いです。\n");
    }
    
    return 0;
}

この例では、変数temperatureの値が20より大きいため、「今日は暑いです。」というメッセージが表示されます。

if-else文

[編集]

条件が満たされない場合に別の処理を行いたい場合は、else句を使用します:

if (条件式) {
    // 条件式が真の場合に実行される文
} else {
    // 条件式が偽の場合に実行される文
}

以下に例を示します:

#include <stdio.h>
int main() {
    int score = 75;
    
    if (score >= 60) {
        printf("合格です!\n");
    } else {
        printf("不合格です。\n");
    }
    
    return 0;
}

この例では、変数scoreの値が60以上であるため、「合格です!」というメッセージが表示されます。

if-else if-else文

[編集]

複数の条件を順番に評価したい場合は、else if句を使用します:

if (条件式1) {
    // 条件式1が真の場合に実行される文
} else if (条件式2) {
    // 条件式1が偽で、条件式2が真の場合に実行される文
} else {
    // すべての条件式が偽の場合に実行される文
}

以下に例を示します:

#include <stdio.h>
int main() {
    int score = 85;
    
    if (score >= 90) {
        printf("評価:S\n");
    } else if (score >= 80) {
        printf("評価:A\n");
    } else if (score >= 70) {
        printf("評価:B\n");
    } else if (score >= 60) {
        printf("評価:C\n");
    } else {
        printf("評価:D(不合格)\n");
    }
    
    return 0;
}

この例では、変数scoreの値が85であるため、「評価:A」というメッセージが表示されます。

条件演算子(三項演算子)

[編集]

単純なif-else文は、条件演算子(三項演算子)を使って簡潔に書くこともできます:

結果 = (条件式) ? 真の場合の値 : 偽の場合の値;

以下に例を示します:

#include <stdio.h>
int main() {
    int age = 20;
    const char* status = (age >= 18) ? "成人" : "未成年";
    
    printf("あなたは%sです。\n", status);
    
    return 0;
}

この例では、変数ageの値が18以上であるため、statusには「成人」という文字列が代入され、「あなたは成人です。」というメッセージが表示されます。

if文における一般的なエラーと防止策

[編集]
エラーパターン 説明 防止策
単一の=の使用 if (x = 5)のように、比較(==)ではなく代入(=)を使ってしまう 定数を左側に置く:if (5 == x)
波括弧の省略 複数文を実行したいのに波括弧を省略する 常に波括弧を使用する習慣をつける
論理演算子の誤用 &&と`\ \ `の優先順位を誤解する 括弧を使って明示的に優先順位を示す
浮動小数点数の厳密比較 if (x == 1.0)のように浮動小数点数を厳密に比較する 許容誤差を考慮:if (fabs(x - 1.0) < EPSILON)

実践的なif文の使用例

[編集]

以下は、ファイル操作におけるエラーハンドリングの例です:

#include <stdio.h>
#include <stdlib.h>
int main() {
    FILE* file = fopen("data.txt", "r");
    
    if (file == NULL) {
        fprintf(stderr, "ファイルを開けませんでした。\n");
        return EXIT_FAILURE;
    }
    
    // ファイル操作のコード
    
    fclose(file);
    return EXIT_SUCCESS;
}

この例では、ファイルを開く操作が失敗した場合にエラーメッセージを表示し、プログラムを終了します。

まとめ

[編集]

if文は、C言語の基本的な制御構造であり条件分岐を効果的に使いこなすことで、より堅牢で保守性の高いプログラムを作成することができます。