[前へ]   [目次へ]   [次へ]

breakとcontinue(後編)(C/C++)

今回は、 continue についてです。

continue は現在週のループブロックのコード実行を終了して、次の週に直ちに実行を移します。
ようは、 for ループで使用した場合は「続行式」から、それ以外では「継続条件」に実行位置を移動します。
そして、継続条件判定を行い、真ならばループ続行、偽ならばループは終了します。

対象になるブロックは直近の for while do ループブロックで、 break 同様 if などのブロックには反応しません。

<  1>
<  2>
<  3>
<  4>
<  5>
<  6>
<  7>
<  8>
<  9>
< 10>
< 11>
< 12>
< 13>
< 14>
< 15>
< 16>
< 17>
#include <stdio.h>

int main(void)
{
   
int i;
   
for(i=1;i<10;i++){
      printf(
"%d回目のループ実行中\n",i);
      
if(i%2){//(1)iを2で割ったときの余りが0ではない時(つまり奇数)
         
continue;//(2)ループをcontinueします。
      }
      puts(
"ループブロック終端です");//(3)continueしたら実行されません。
   }
   puts(
"ループが終わりました。");
   
//終了待ち
   
getchar();
   
return 0;
実行結果:
1回目のループ実行中
2回目のループ実行中
ループブロック終端です
3回目のループ実行中
4回目のループ実行中
ループブロック終端です
5回目のループ実行中
6回目のループ実行中
ループブロック終端です
7回目のループ実行中
8回目のループ実行中
ループブロック終端です
9回目のループ実行中
ループが終わりました。

(1)8行目の i%2 は、注釈にあるとおり、 i を2で割った余りを返します。
結果的に偶数の時、割り切れて0、奇数のとき、余り1が返されます。
条件式は0以外の時真なので、 i が奇数の時のみ、この条件は成立します。

(2)9行目の continue は8行目の if と組み合わされて奇数の時だけ実行されます。
continue が実行されるとその週の実行はその時点で終了するため、11行目の puts は実行されません。
また、続行式は実行されて i が増えていることが確認できます。

(3)上記理由により11行目の puts は8行目の if が偽( continue が実行されない)時のみ実行されます。
そのため、 i が偶数になる偶数回目のループのみ表示されています。


ループの中にループを作った場合は continue は一番近い対象ブロックの終点に移動します。
<  1>
<  2>
<  3>
<  4>
<  5>
<  6>
<  7>
<  8>
<  9>
< 10>
< 11>
< 12>
< 13>
< 14>
< 15>
< 16>
< 17>
< 18>
< 19>
#include <stdio.h>

int main(void)
{
   
int i,j;
   
for(i=1;i<3;i++){
      printf(
"%d回目のループA実行中\n",i);
      
for(j=1;j<3;j++){
         printf(
"%d/%d回目のループB実行中\n",i,j);//ループA/ループBの現在値を表示
         
continue;//(1)無条件にループをcontinueします。
         
puts("ループBブロック終端です");//必ずcontinueされるのでここは実行されません。
      }
      puts(
"ループAブロック終端です");
   }
   puts(
"ループが終わりました。");
   
//終了待ち
   
getchar();
   
return 0;
実行結果:
1回目のループA実行中
1/1回目のループB実行中
1/2回目のループB実行中
ループAブロック終端です
2回目のループA実行中
2/1回目のループB実行中
2/2回目のループB実行中
ループAブロック終端です
ループが終わりました。

(1)10行目の continue がループBのみに影響しているのが分かります。
また、当然ですが break や continue を条件も掛けずに使用することは通常ありません。
無条件に break すればそれはループではなくただの条件分岐になってしまいますし、
無条件に continue すればそれ以下のコードは実行されません。
注釈代わりに使えないこともありませんが、混乱の元なのでいつまでも放置しないほうがいいでしょう。

これで、今回のミニゲームを作るのに必要な要素が全て揃いました。
今回は少し大きいので次回は実際に作る前に要件を整理してみようと思います。

[前へ]   [目次へ]   [次へ]

プログラミング講座 総合目次

最終更新 2008/10/17