第6章の8 continue文

1. continue文の基本

continue文は、ループの途中で最初に戻ってやり直すときに使うジャンプ文です。

  • for、while、do~while のループの中で処理をスキップさせるために用いる。
  • 通常 if文と併用され、ループ処理の中で、ある条件が成立する場合、それ以下の処理を行わずにスキップする。
// 正の整数値を5回を加算する例
#include <stdio.h>

int main(void)
{
    int n, sum = 0;

    int i = 1;
    while (i <= 5) {        // とりあえず 5回ループ
        scanf("%d", &n);
        if (n < 0)           // 入力データが負なら
            continue;        // 以下の処理をスキップする
        sum += n;
        i++;
    }
    printf("sum = %d\n", sum);

    return 0;
}

【実行結果例】
1
2
-1
← スキップされ加算されない
3
4
5

sum = 15

水色文字はキーボードからの入力

  • この例では、入力値が負だった場合は、sum += n; の処理を行わず、 次の scanf() の処理を実行することになります。
  • continue文は、制御の流れをやや分かりづらくするので、それほど多用されることはありません。
  • ただし、if文が幾重にもなり、字下げが強くなったときは、 continue文で字下げなしのスキップ処理をすることが有効なときがあります。
  • continueはループのブロック終了の } の直前に処理をスキップしてから、 その後ループの先頭に戻ります。

2. continue文をwhile文とfor文の中で使った場合の違い

実はcontinue文をwhile文の中で用いた場合とfor文の中で用いた場合とでは、スキップの動きが異なります。

下の例に見られるように、while文ではcontinueで「i++;」が実行されないため、負数を入れる限り処理がスキップされます。

しかし、for文ではcontinueでも「i++;」が実行されるため、スキップは5回のみになります。

while文で用いたcontinue文

#include <stdio.h>

int main(void)
{
    int n, sum = 0;

    int i = 1;
    while (i <= 5) {
        scanf("%d", &n);
        if (n < 0)
            continue;
        sum += n;
        i++;
    }
    printf("sum = %d\n", sum);

    return 0;
}

【実行結果例】
-1
-1
-1
-1
-1

-1

水色文字はキーボードからの入力
※ 何度-1を入力してもスキップするため終了しない

for文で用いたcontinue文

#include <stdio.h>

int main(void)
{
    int n, sum = 0;

    for (int i = 1; i <= 5; i++) {
        scanf("%d", &n);
        if (n < 0)
            continue;
        sum += n;
    }
    printf("sum = %d\n", sum);

    return 0;
}

【実行結果例】
-1
-1
-1
-1
-1

sum = 0

水色文字はキーボードからの入力
※ i++; が実行されスキップは5回のみ

【フローチャート】


【フローチャート】

〇 演習問題

まず、割られる数を 100.0 としなさい。
そして、0.0 以外の浮動小数点数を入力し、割られる数を割りなさい。
この浮動小数点数入力、除算の処理を 10回連続して行いなさい。
ただし、除算の結果が 1.0 未満になったらこの処理を終了しなさい。

【実行結果例】
浮動小数点数を入力 5
data1 = 20.000000
浮動小数点数を入力 5
data1 = 4.000000
浮動小数点数を入力 5
data1 = 0.800000

水色文字はキーボードからの入力

解答例

#include <stdio.h>

int main(void)
{
    double data1 = 100.0, data2;

    int i = 1;
    while (i <= 10) {
        printf("浮動小数点数を入力 ");
        scanf("%lf", &data2);
        if (data2 == 0.0)
            continue;
        data1 = data1 / data2;
        printf("data1 = %f\n", data1);
        if (data1 < 1.0)
            break;
        i++;
    }
    return 0;
}

コメント