Cプログラミングでは、ループを制御するための重要な文として、break文とcontinue文があります。これらの文を使うことで、ループの実行を効率的に管理し、特定の条件に応じてループを中断したり、次の反復にスキップしたりすることができます。
このガイドでは、break文とcontinue文の基本的な使い方、具体的な例、およびこれらの文を使用する際の注意点について詳しく説明します。これにより、プログラムのロジックを柔軟に制御し、より効率的なコードを書くためのスキルを身につけることができるでしょう。
break文
break文は、ループを強制的に終了するために使用されます。break文が実行されると、ループの残りの反復はスキップされ、ループの直後のコードが実行されます。
break文の基本例
#include <stdio.h>
int main() {
    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            break; // iが5になったらループを終了
        }
        printf("カウント: %d\n", i);
    }
    return 0;
}
出力:
カウント: 0 カウント: 1 カウント: 2 カウント: 3 カウント: 4
continue文
continue文は、現在のループ反復をスキップし、次の反復に進むために使用されます。continue文が実行されると、それ以降のコードはスキップされ、次のループ反復が開始されます。
continue文の基本例
#include <stdio.h>
int main() {
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue; // 偶数の場合はスキップ
        }
        printf("奇数: %d\n", i);
    }
    return 0;
}
出力:
奇数: 1 奇数: 3 奇数: 5 奇数: 7 奇数: 9
ネストされたループでのbreak文
ネストされたループでbreak文を使用すると、内側のループのみが終了し、外側のループは継続されます。
#include <stdio.h>
int main() {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (j == 1) {
                break; // 内側のループを終了
            }
            printf("%d, %d\n", i, j);
        }
    }
    return 0;
}
出力:
0, 0 1, 0 2, 0
ネストされたループでのcontinue文
ネストされたループでcontinue文を使用すると、内側のループの次の反復に進みます。
#include <stdio.h>
int main() {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (j == 1) {
                continue; // 内側のループの次の反復に進む
            }
            printf("%d, %d\n", i, j);
        }
    }
    return 0;
}
出力:
0, 0 0, 2 1, 0 1, 2 2, 0 2, 2
break文とcontinue文の組み合わせ
break文とcontinue文を組み合わせて使用することで、ループの制御をさらに柔軟にすることができます。
#include <stdio.h>
int main() {
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue; // 偶数の場合はスキップ
        }
        if (i == 7) {
            break; // iが7になったらループを終了
        }
        printf("奇数: %d\n", i);
    }
    return 0;
}
出力:
奇数: 1 奇数: 3 奇数: 5
総合例
以下に、ここまで紹介したbreak文とcontinue文の知識を統合したプログラムを示します。このプログラムでは、基本的な使用方法、ネストされたループでの使用、および組み合わせの使用を含んでいます。
#include <stdio.h>
int main() {
    // 基本的なbreak文の使用
    printf("基本的なbreak文の使用:\n");
    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            break; // iが5になったらループを終了
        }
        printf("カウント: %d\n", i);
    }
    // 基本的なcontinue文の使用
    printf("\n基本的なcontinue文の使用:\n");
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue; // 偶数の場合はスキップ
        }
        printf("奇数: %d\n", i);
    }
    // ネストされたループでのbreak文
    printf("\nネストされたループでのbreak文:\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (j == 1) {
                break; // 内側のループを終了
            }
            printf("%d, %d\n", i, j);
        }
    }
    // ネストされたループでのcontinue文
    printf("\nネストされたループでのcontinue文:\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (j == 1) {
                continue; // 内側のループの次の反復に進む
            }
            printf("%d, %d\n", i, j);
        }
    }
    // break文とcontinue文の組み合わせ
    printf("\nbreak文とcontinue文の組み合わせ:\n");
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue; // 偶数の場合はスキップ
        }
        if (i == 7) {
            break; // iが7になったらループを終了
        }
        printf("奇数: %d\n", i);
    }
    return 0;
}
結論
break文とcontinue文は、ループの制御において非常に強力なツールです。これらを適切に使用することで、プログラムの流れを柔軟に制御することができます。これらの知識を基に、より効率的で読みやすいコードを作成しましょう。
