では、反復構造の最後のキーワード「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等の文はどれも多用するとプログラムを読みにくくします。
もし、これらの文を多用しなければならない状況になった場合は、プログラムの作り方自体を再度見直した方が良いかも知れません。