1. break文の基本
break文は、switchのブロックやループから脱出する際に使用します。
- switch文で、case句の処理を打ち切りブロックを脱出するときに用いる。 ⇒ 説明済み
- for文、while文などのループから脱出するときに、if文と併用して用いる。
#include <stdio.h>
int main(void)
{
int n, sum;
sum = 0;
// とりあえず 10回ループ
for (int i = 1; i <= 10; i++) {
scanf("%d", &n);
if (n == -1) // 入力データが -1 なら
break; // ループから脱出
sum = sum + n;
}
printf("sum = %d\n", sum);
return 0;
}
【実行結果例】
1
2
3
-1
sum = 6
【フローチャート】

この例では、とりあえず 10回ループすることになっていますが、 入力値が -1 だった場合は、直ちにループ処理を打ち切ることになります。
つまり、「10個の入力データ、または -1 が入力されるまでデータの合計をとる」という処理になっています。
2. 多重ループを一気に抜ける
break文を多重ループの中で使用した場合は、 そのbreak文の含まれるループからひとつだけ脱出するので注意してください。

ですから、二重、三重のループを抜けるには、その度にbreak文を使うようになります。
下の例では三重ループを抜けるのに、3回breakしています。
#include <stdio.h>
int main( void )
{
int i, j, k, no = 1;
for (i=1; i<=10; i++) {
for (j=1; j<=10; j++) {
for (k=1; k<=10; k++) {
no = no + (i * j + k);
if (no >= 2000) break;
}
if (no >= 2000) break;
}
if (no >= 2000) break;
}
printf("i:%d j:%d k:%d\n",i,j,k);
return 0;
}
【実行結果例】
i:2 j:7 k:9
#include <stdio.h>
int main( void )
{
int i, j, k, no = 1;
for (i=1; i<=10; i++) {
for (j=1; j<=10; j++) {
for (k=1; k<=10; k++) {
no = no + (i * j + k);
if (no >= 2000) goto OUT;
}
}
}
OUT:
printf("i:%d j:%d k:%d\n",i,j,k);
return 0;
}
goto文では、コロン(:)を付けたラベル(上記では “OUT” )へ一気に制御を移すことができます。その有効範囲は関数内部になります。
〇 演習問題
問1
予め決めた数を当てるゲームのプログラムを次の要領で作成しなさい。
- 5回ループしながら、数字を入力する。
- 入力した数字が 5 ならループを脱出する。
- 5回以内に当たれば、当たりまでの回数を表示する。
- 5回以内に当たらなければ、当たりの数字を表示する。
【実行結果例】
数当てゲームです。
1~10の整数値を入力> 8
1~10の整数値を入力> 5
2回目で当たりです。
※ 水色文字はキーボードからの入力。
問2
次の仕様に従って、プログラムを作成せよ。
- 2つの整数の除算を行い、小数点以下 50桁まで求めなさい。
- ただし、計算途中で割り切れた場合は、それ以後の小数点は求めません。
- また、割る数に 0 が入力された場合は計算を行いません。
- 負数は入力されないものとします。
【処理手順】
- 計算結果を格納する整数型配列を大きさ 51 で宣言する。
- 整数値 ( a, b ) を入力する。
- b に 0 が入力されたら、そのまま処理を終了する。
(コンピュータでは 0 で割るという処理はあってはならないもの。) - 計算結果 [0] に a を b で割った結果を格納する。
- 1 から 51 までループする。
・ a を b で割った余りが 0 ならループを終了する。
・ a に余り × 10 を代入する。
・ 計算結果 [ループ番目] に a を b で割った結果を格納する。 - 計算結果を表示する。

【実行結果例1】(小数部で割り切れる)
整数値を2つ入力してください 5 4
5 / 4 = 1.25
【実行結果例2】(割り切れない)
整数値を2つ入力してください 10 3
10 / 3 = 3.33333333333333333333333333333333333333333333333333
(小数点以下50桁)
【実行結果例3】(整数部で割り切れる)
整数値を2つ入力してください 10 2
10 / 2 = 5.
【実行結果例4】( b に 0 を入力)
整数値を2つ入力してください 10 0
処理終了
※ 水色文字はキーボードからの入力
解答例
// 問1
#include <stdio.h>
int main(void)
{
int i, no;
printf("数当てゲームです。\n");
for (i = 1; i <= 5; i++) {
printf("1~10の整数値を入力> ");
scanf("%d", &no);
if (no == 5)
break;
}
if (i <= 5) {
printf("%d回目で当たりです。\n", i);
}
else {
printf("残念でした。当たりは%dです。\n", 5);
}
return 0;
}
// 問2
#include <stdio.h>
int main(void)
{
int kekka[51];
int i, a, b;
int amari;
printf("整数値を2つ入力してください ");
scanf("%d%d", &a, &b);
if(b == 0){
printf( "処理終了\n" );
return 0;
}
printf("%d / %d = ", a, b);
kekka[0] = a / b;
for (i = 1; i < 51; i++) {
amari = a % b;
if (amari == 0)
break;
a = amari * 10;
kekka[i] = a / b;
}
printf("%d.", kekka[0]);
for (a = 1; a < i; a++) {
printf("%d", kekka[a]);
}
printf("\n");
return 0;
}
コメント