C言語/break
表示
< C言語
break文
[編集]C言語におけるbreak文は制御フローを変更する重要な命令です。主にループ(for、while、do-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文の実行フローを制御するための重要な命令です。適切に使用することで、特定の条件が満たされた時に処理を中断し、コードの効率性と明確さを向上させることができます。ただし、過度の使用はコードの可読性を低下させる可能性があるため、使用には注意が必要です。