★基本制御文(反復構造:continue)★
では、反復構造の最後のキーワード「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;
} |
<実行結果 VC++ Express Edition>
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;
}
|
<実行結果 VC++ Express Edition>
Hello
Hello
Hello
Hello
Hello
続行するには何かキーを押してください・・・
「printf "World\n" );」という箇所は実行されず、「Hello」が5回表示されます。
無限ループにならず、きちんと終了しますので、変数iもちゃんと増加しています。
for文の場合は、「増分」の箇所が実行された後に、「繰り返し条件」へと制御が移ります。
通常、上のプログラムのようにcontinue文単独で書くことはありません。
if文等を組み合わせて使いますが、continue文を多用するケースはあまり無いと思います。
break、continue、goto等の文はどれも多用するとプログラムを読みにくくします。
もし、これらの文を多用しなければならない状況になった場合は、プログラムの作り方自体を再度見直した方が良いかも知れません。