★基本制御文(反復構造: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;
}

<実行結果>

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等の文はどれも多用するとプログラムを読みにくくします。

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


次へ

戻る

目次へ