ループの途中で制御を変える2つの命令を学ぶ。
どちらも for・while の中で使える。
break はループを即座に終了させる。
ループ条件に関係なく、その時点でループを抜ける。
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 10; i++) {
if (i > 5) {
break; /* i が 5 を超えたらループを抜ける */
}
printf("%d ", i);
}
printf("\n");
return 0;
}
1 2 3 4 5
continue はループを終了させず、その回の残りの処理をスキップして次の繰り返しへ進む。
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 5; i++) {
if (i % 2 == 0) {
continue; /* 偶数のときだけスキップ */
}
printf("%d ", i);
}
printf("\n");
return 0;
}
1 3 5
| break | continue | |
|---|---|---|
| 動作 | ループを完全に終了 | その回だけスキップして次へ |
| ループの継続 | しない | する |
| よく使う場面 | 条件成立で検索終了 | 特定条件の要素を除外 |
#include <stdio.h>
int main(void)
{
int i;
/* break の場合:i == 3 でループ終了 */
printf("break: ");
for (i = 1; i <= 5; i++) {
if (i == 3) { break; }
printf("%d ", i);
}
printf("\n");
/* continue の場合:i == 3 のときだけスキップ */
printf("continue: ");
for (i = 1; i <= 5; i++) {
if (i == 3) { continue; }
printf("%d ", i);
}
printf("\n");
return 0;
}
break: 1 2 continue: 1 2 4 5
「正しい値が入力されるまで繰り返す」という実用的なパターン。
#include <stdio.h>
int main(void)
{
int n;
while (1) { /* 条件が常に真 → 無限ループ */
printf("1〜10の整数を入力してください: ");
scanf("%d", &n);
if (n >= 1 && n <= 10) {
break; /* 正しい値なら抜ける */
}
printf("無効な値です。もう一度入力してください。\n");
}
printf("入力された値: %d\n", n);
return 0;
}
1〜10の整数を入力してください: 15 無効な値です。もう一度入力してください。 1〜10の整数を入力してください: 0 無効な値です。もう一度入力してください。 1〜10の整数を入力してください: 7 入力された値: 7
while (1) は意図的な無限ループ。break で抜けることを前提にしている。1〜20 の整数のうち、3の倍数を除いた合計を計算して表示するプログラムを作れ。
#include <stdio.h>
int main(void)
{
int i, sum = 0;
for (i = 1; i <= 20; i++) {
/* 3の倍数のときは continue でスキップ */
sum += i;
}
printf("合計 = %d\n", sum);
return 0;
}
#include <stdio.h>
int main(void)
{
int i, sum = 0;
for (i = 1; i <= 20; i++) {
if (i % 3 == 0) { continue; }
sum += i;
}
printf("合計 = %d\n", sum);
return 0;
}
実行結果:合計 = 147(1〜20の合計210 から 3+6+9+12+15+18=63 を引いた値)
1〜100 の整数を順に調べ、最初に見つかった5の倍数を表示してループを終了するプログラムを作れ。
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 100; i++) {
/* 5の倍数が見つかったら表示して break */
}
return 0;
}
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 100; i++) {
if (i % 5 == 0) {
printf("最初の5の倍数: %d\n", i);
break;
}
}
return 0;
}
実行結果:最初の5の倍数: 5
Q1. 次のコードの出力として正しいものはどれか。
int i = 0;
while (i < 5) {
i++;
if (i == 3) { break; }
printf("%d ", i);
}
正解:イ
i=1 → 出力、i=2 → 出力、i=3 → break でループ終了。3は出力されない。
Q2. 次のコードの出力として正しいものはどれか。
int i;
for (i = 0; i < 5; i++) {
if (i == 2) { continue; }
printf("%d ", i);
}
正解:イ
i=2 のとき continue でその回の printf をスキップする。ループは継続するので 3, 4 は出力される。
Q3. break と continue の説明として正しいものはどれか。
正解:ウ
break はループ全体を終了。continue はその回の残りをスキップして次の繰り返しへ。どちらも for・while どちらでも使える。
Q4. while (1) { ... break; } の構造について正しい説明はどれか。
正解:イ
C言語では 1 は真なので while (1) は無限ループ。
「正しい入力が来るまで繰り返す」などの用途で意図的に使い、break で抜ける。