C言語入門:break文(2)
break文はループから抜けるための構文ですが、breakにより抜けるループは一番内側の一つだけです。 ここでは例を示しながら「一番内側のループから抜ける」ということの説明をしたいと思います。 ここでは、サンプルコードの結果は書いていません。 実際に手元にサンプルコードをコピー ⇒ コンパイル ⇒ 実行してみてください。
サンプル1
前述した例は単純にfor文が一つあって、その中にbreak文がありました。 では、for文の中にfor文があって、その中にbreak文があった場合にはどのようになるのでしょうか?
答えから書いてしまうと、break文は一番内側のループに対してしか適応されません。 そのためfor文の中にfor文があって、その中にbreak文があるとbreak文が実行されたときには内部のfor文だけを抜けることになります。
では、実際にfor文の中にfor文を入れた例を以下に示します。 どのような挙動を示すか試してみてください。
#include <stdio.h>
int
main()
{
int i, k;
for (i = 0; i < 5; i++) {
printf("i = %d\n", i);
for (k = 0; k < 5; k++) {
printf("k = %d\n", k);
if (k == i) {
printf("break\n");
break;
}
}
printf("after for(k) : i = %d\n", i);
}
return 0;
}
上記例では、外側のfor文は「for (i = 0; i < 5; i++)」とあるので5回繰り返しを行おうとします。 変数iを使ったfor文の中には変数kを利用したfor文「for (k = 0; k < 5; k++)」があります。 上記例では、変数iと変数kの値が同一のときにbreak文が実行されます。 break文は、break文からみて一番内側のループだけを抜けるので、外側のfor文に戻ります。 言い方を変えると、break文は変数kを使ったfor文からのみ抜け出します。
サンプル2
次の例では、for文の中のwhile文でbreak文を使った例です。
#include <stdio.h>
int
main()
{
int i, k;
for (i = 0; i < 5; i++) {
printf("in for i=%d\n", i);
k = 0;
while (k < 5) {
printf("in while k=%d\n", k);
if (k == i) {
printf("break\n");
break;
}
k++;
}
printf ("after while\n");
}
return 0;
}
上記例はサンプル1と全く同じ挙動を示します。
次:コメントの書き方
おまけ