auの日記

プログラミング初心者の日記。(auはハンドルネームです)

C言語でfor文でgotoを使うとcontinueでできないことができる

auです。

今回は、for文で回してる時に「continueを使うとその時のループは終わっちゃって困るなー」と思ったのでなんとかしてみました。

0~9の偶数をcontinueするプログラムを組む

#include <stdio.h>

int main(void) {
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue;
        }
        printf("i: %d\n", i);

    }
    return 0;
}

// 実行結果
i: 1
i: 3
i: 5
i: 7
i: 9


これだと結果の通り、iが偶数の場合はスキップしてしまっています。


ん〜、continueだとその回のループ飛んじゃうなー…


でも、その時のiに戻れたら何かできそうだなということで戻る方法を探してみました。


ということで、gotoで最初に戻ってみました。

#include <stdio.h>

int main(void) {
    for (int i = 0; i < 10; i++) {
    ret:
        if (i % 2 == 0) {
            printf("戻りi: %d\n", i);
            i++;
            goto ret;
        }
        printf("i: %d\n", i);

    }
    return 0;
}

// 実行結果
戻りi: 0
i: 1
戻りi: 2
i: 3
戻りi: 4
i: 5
戻りi: 6
i: 7
戻りi: 8
i: 9


"戻りi"と出力されているのが、iが偶数の場合の時です。


読みくいなー…と感じると思いますが、ループのその回が終わった際の変化式(forの"i++"の部分)をifに入った際に行いました。ifの中の"i++"を除いた際は、i=0のままになった状態になり、ずっとループをしてしまいました。


このことから、gotoでiの値を保持したまま最初に戻れている確認をすることができました。