基本制御文(反復構造: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等の文はどれも多用するとプログラムを読みにくくします。

もし、これらの文を多用しなければならない状況になった場合は、プログラムの作り方自体を再度見直した方が良いかも知れません


次へ

戻る

目次へ