コンテンツにスキップ

C言語/break

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


break文

[編集]

C言語におけるbreak文は制御フローを変更する重要な命令です。主にループ(forwhiledo-while)やswitch文の中で使用され、現在の制御ブロックから即座に抜け出すために使われます。

break文の基本

[編集]

break文は単純な構文を持っています:

break;

この一行だけで、最も内側のループまたはswitch文から抜け出します。

ループ内でのbreak文

[編集]

break文を使うと、条件に関わらずループを途中で終了させることができます。以下にwhileループでの例を示します:

#include <stdio.h>
int main() {
    int i = 1;
    
    while (i <= 10) {
        printf("%d ", i);
        
        if (i == 5) {
            printf("\n5に到達したためループを終了します\n");
            break; // ループを抜ける
        }
        
        i++;
    }
    
    printf("ループ後の処理を実行します\n");
    return 0;
}

実行結果:

1 2 3 4 5 
5に到達したためループを終了します
ループ後の処理を実行します

このコード例では、カウンタが5に達したときにbreak文が実行され、それ以降のループ処理(本来なら10までカウントするはず)がスキップされています。

多重ループとbreak文

[編集]

break文は常に最も内側のループのみを終了させます。多重ループから抜け出すには、フラグ変数や関数の使用、あるいはgoto文などの手法が必要です。

#include <stdio.h>
int main() {
    for (int i = 1; i <= 3; i++) {
        printf("外側ループ: i = %d\n", i);
        
        for (int j = 1; j <= 3; j++) {
            printf("  内側ループ: j = %d\n", j);
            
            if (i == 2 && j == 2) {
                printf("  break実行: i=2, j=2 の時\n");
                break; // 内側のループのみ終了
            }
        }
    }
    
    return 0;
}

実行結果:

外側ループ: i = 1
  内側ループ: j = 1
  内側ループ: j = 2
  内側ループ: j = 3
外側ループ: i = 2
  内側ループ: j = 1
  内側ループ: j = 2
  break実行: i=2, j=2 の時
外側ループ: i = 3
  内側ループ: j = 1
  内側ループ: j = 2
  内側ループ: j = 3

switch文内でのbreak文

[編集]

switch文では、breakはケース間の「落下(fall-through)」を防ぐために必須です。breakがないと、一致したケース以降のすべての処理が実行されます。

#include <stdio.h>
int main() {
    int choice = 2;
    
    printf("選択された値: %d\n", choice);
    
    switch (choice) {
        case 1:
            printf("選択肢1が選ばれました\n");
            break;
        
        case 2:
            printf("選択肢2が選ばれました\n");
            break; // このbreakがないと、case 3の処理も実行される
        
        case 3:
            printf("選択肢3が選ばれました\n");
            break;
        
        default:
            printf("無効な選択肢です\n");
    }
    
    return 0;
}

実行結果:

選択された値: 2
選択肢2が選ばれました

break文がない場合の例:

#include <stdio.h>
int main() {
    int month = 4;
    int days;
    
    switch (month) {
        case 4: case 6: case 9: case 11:
            days = 30;
            break;
            
        case 2:
            days = 28; // うるう年は考慮していない
            break;
            
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            days = 31;
            break;
            
        default:
            days = -1; // 無効な月
    }
    
    printf("%d月は %d 日あります\n", month, days);
    return 0;
}

break文の使用と注意点

[編集]

以下の表はbreak文の使用に関する重要なポイントをまとめたものです:

使用場所 効果 注意点
for文 ループを即座に終了 ループカウンタの更新式は実行されない
while文 ループを即座に終了 条件式に関わらずループを抜ける
do-while文 ループを即座に終了 最低1回は本体が実行される
switch文 現在のケースから抜け出す break忘れによるフォールスルーに注意
多重ループ 最内側のループのみ終了 全てのループを抜けるには別の手法が必要

応用例:入力検証

[編集]

break文は入力検証にも便利です。例えば、ユーザーが特定の値を入力するまでループを続ける場合:

#include <stdio.h>
int main() {
    printf("1〜10の数値を入力してください(0で終了):\n");
    
    for (;;) { // 無限ループ
        printf("入力: ");

        int input;
        scanf("%d", &input);
        
        if (input == 0) {
            printf("プログラムを終了します\n");
            break;
        }
        
        if (input >= 1 && input <= 10) {
            printf("有効な入力です: %d\n", input);
        } else {
            printf("範囲外の入力です。1〜10の数値を入力してください\n");
        }
    }
    
    return 0;
}

まとめ

[編集]

break文はC言語において、ループやswitch文の実行フローを制御するための重要な命令です。適切に使用することで、特定の条件が満たされた時に処理を中断し、コードの効率性と明確さを向上させることができます。ただし、過度の使用はコードの可読性を低下させる可能性があるため、使用には注意が必要です。