では、反復構造の最後のキーワード「continue」について書きます。
まずは使い方ということで、次のプログラムを実行させてください。
<sample program 060-01-1>
#include <stdio.h>
int main(void)
{
int counter;
counter = 0;
while (counter < 5) {
printf("Hello\n");
continue;
counter++;
}
return 0;
}
|
「Hello」とう文字列が延々と表示され、いわゆる無限ループになっています。
これは、continue文によって「counter++;」の箇所が飛ばされているために起こっています。
<sample program 060-01-2>
#include <stdio.h>
int main(void)
{
int counter;
counter = 0;
while (counter < 5) { /* ここへ移動 */
printf("Hello\n");
continue; /* 繰り返し条件に移動 */
counter++;
}
return 0;
}
|
このようにcontinue文を実行すると「繰り返し条件」に制御が移ります。
警告レベルを4に設定している方は、コンパイル時に警告が出ているのが分るでしょう。
warning C4702: 制御が渡らないコードです。
これは、「counter++;」の部分への警告です。
制御が渡らない、つまり実行されないということです。
次のプログラムも試してください。
<sample program 060-02>
#include <stdio.h>
int main(void)
{
int counter;
counter = 0;
do {
printf("Hello\n");
continue; /* 繰り返し条件へ */
counter = 1; /* 実行されない */
} while (counter == 1); /* ここへ移動 */
return 0;
}
|
<実行結果>
Hello 続行するには何かキーを押してください・・・
「Hello」と1回だけ表示されます。
繰り返し条件は「counterが1の時」ですから、すぐに終わってしまうわけです。
では、for文ではどうでしょうか。
<sample program 060-03>
#include <stdio.h>
int main(void)
{
int i;
for (i = 0; i < 5; i++) {
printf("Hello\n");
continue;
printf("World\n");
}
return 0;
}
|
<実行結果>
Hello Hello Hello Hello Hello 続行するには何かキーを押してください・・・
printf "World\n");
という箇所は実行されず、「Hello」が5回表示されます。
無限ループにならず、きちんと終了しますので、変数iもちゃんと増加しています。
for文の場合は、continue文が実行されると「増分」の箇所へ移動します。
「増分」の箇所が実行された後に、「繰り返し条件」へと制御が移ります。
通常、上のプログラムのようにcontinue文単独で書くことはありません。
if文等を組み合わせて使いますが、continue文を多用するケースはあまり無いと思います。
break、continue、goto等の文はどれも多用するとプログラムを読みにくくします。
もし、これらの文を多用しなければならない状況になった場合は、プログラムの作り方自体を再度見直した方が良いかも知れません。