いつも感謝しています。Nです。
記事"break文「脱出!」"で、break文についてお話しました。
for, while, do~while, switchで使えて、breakに出会うとそれを囲んでる最も内側のそれらの{ }から抜けることができるというものでした。
今回は、continue文についてお話したいと思います。
continue文は、break文と比べるとそれほど出てこないかもしれません。ですが、そのため他人が書いたプログラムとかで「continue」に出会うと、「あれ、なんだっけ?」となりやすいです。
なので、仮に自分ではあまり使わないなぁと思っても、continue文の意味とbreak文との違いは押さえておきましょうね。
では、具体的に話していきます。
break文は「脱出」「抜ける」という意味がありました。
一方、continue文には「スキップしてまた続けるか判断する」という意味があります。
またbreak文は、「何から脱出、抜けるの?」という問いに対して、for, while, do~while, switchの{ }から「脱出」「抜ける」ということでした。
では、continue文は「どこにスキップしてまた続けるか判断するの?」という質問をした場合、
continue文に出会うと、ただちに、continue文を囲んでいる最も内側のfor, while, do~whileの{ }の終わりへスキップして、それらの先頭に戻り、また続けるかどうか繰り返しの条件と照らし合わせて判断するとなります。
少し話しが複雑になりましたが、ここまでで押さえて欲しいのは、
1: continue文は、「スキップして、また続けるか判断する」という意味があるんだなぁ。
2: continue文は、for, while, do~whileと関係しているんだなぁ。break文ではswitchとも関係していたが、continue文はswitchとは関係しないんだなぁ。
ということです。
ではもっと、具体的にサンプルプログラムを用いてお話しますね。
int main( void )
{
int ii;
for( ii = 0; ii <= 3; ii++ )
{
printf("ii = %d¥n", ii );
}
return( 0 );
}
実行結果:
ii = 0
ii = 1
ii = 2
ii = 3
このプログラムは、break文もcontinue文も入っていないので、実行結果のような表示がされますね。
では、次にbreak文を入れてみましょう。
int main( void )
{
int ii;
for( ii = 0; ii <= 3; ii++ )
{
if( ii == 2 )
{
break;
}
printf("ii = %d¥n", ii );
}
return( 0 );
}
実行結果:
ii = 0
ii = 1
break文を入れたので、ii が2になったときにfor文から脱出して実行結果のようになりますね。
では、次にcontinue文にしてみましょう。
int main( void )
{
int ii;
for( ii = 0; ii <= 3; ii++ )
{
if( ii == 2 )
{
continue;
}
printf("ii = %d¥n", ii );
}
return( 0 );
}
実行結果:
ii = 0
ii = 1
ii = 3
"ii = 2"という表示が、スキップされました!。
これは、
Step1: iiが2になったときに、continueと出会った
Step2: continueと出会ったので、それ以降に記載されているprintf文はスキップ
Step3: どこまでスキップするかというと、for文の{ }の終わり
Step4: ii++が実行されて、iiは3になる
Step5: for文の先頭に戻る
Step6: 繰り返し条件式 ii <= 3と照らし合わせた結果、for文を続行
Step7: 今度はcontinue文と出会わないので、printf文が実行される
その結果、ii = 2という表示が、スキップされたということになります。
どうでしょうか?continue文が少し分かりましたか?
今回のサンプルプログラム「break, continueが無いパターン」「break文があるパターン」「continue文があるパターン」を実際に書いてみて実行してその違いを確認してみてくださいね。
プログラムの上達の秘訣は、実際にプログラムを、「書いて」「試して」「確認する」という3つのステップを体験することが重要です。
是非、「試して確認する」を実行してくださいね。