【14時間目】ループを途中でやめたい時に breakとcontinue
前回までで、while文とfor文と「ループ」という仕組みを勉強してきました。 そしてどちらも、「これが成り立つ限りループしてね」というループの継続条件を記述できました。
では、今回は「途中でループをやめてしまいたいとき」と「次のループにすっ飛ばしたいとき」のお話をします。
途中でおしまい!「break」
ではここで、新しい道具「break」について勉強しましょう。
breakは「ブレイク」と呼びます。英語の単語としては、壊れる、割れる、といった意味のほかに、「中断する」という意味があります。 その通りに、C言語では「ループを中断する」という意味を持ちます。
どういうときに使うの?
例えば、の話をしましょう。イメージしてください。
あなたは唐突に「ぐりとぐら」の本が読みたくなりました。そこで書庫に行ってみると、たくさんの本が山積みになっています。 この中のどこかに、探している本があるかもしれません。一番上の本から切り崩して探していきます。
「一番上の本を取って、題名を確認して、違ったらどこか別の場所において」を1ループとして、繰り返し行っていきますね。
そこでもし、探している本があった場合、どうしますか?
「一番上の本を取って、題名を確認して、それが探している本だったら、それをすぐに持ち出す」となるはずです。 それが例え、まだ全部の本を確認できていなかったとしても。ほしい本は手に入ったんだから、あとの残った本なんてどうでもいいですよね。
そういう時に、ループの途中でそれをやめる、「break」を使います。簡単な日本語コードで見てみましょう。
本 読みたい本;
while(まだ本が積んである?){
//「手元の本」は、本型の変数です。
本 手元の本 = 一番上の本を取る();
if(手元の本.題名 == "ぐりとぐら") {
読みたい本 = 手元の本;
break; //ここで探すのをやめる
}
どこかに置く(手元の本);
}
次までスキップして!「continue」
次は「continue」です。これは「コンティニュー」と呼びます。 よくゲームで、ゲームオーバーになったときに「コンテニュー」をして、もう一回挑戦、しますよね。英語的には「続ける」という意味があるようです。 C言語では、「これ以降の処理をすっ飛ばして、次のループをやって」となります。
どういうときに使うの?
では、先ほどの本の話で例えましょう。あなたは今、「ぐりとぐら」の、それも「カステラを作る話」の本が読みたくなりました。 そういう時は、どういう風に本を探すでしょうか。
「一番上の本を取って、題名が『ぐりとぐら』じゃなければその本はどこかに置く」
「一番上の本を取って、題名が『ぐりとぐら』だったら、パラパラとめくって、カステラの話かどうか確認する」
こんな感じに探すのではないでしょうか。「ぐりとぐら」ではない本だと分かっていながら、中身を確認するのは意味がありません。 そんな時に、スキップするためにcontinueを使います。
本 読みたい本;
while(まだ本が積んである?){
//「手元の本」は、本型の変数です。
本 手元の本 = 一番上の本を取る();
if(手元の本.題名 != "ぐりとぐら") {
//ぐりとぐらじゃないとき
どこかに置く(手元の本);
continue; //次の本へ行く
}
//ここはぐりとぐらだったときしか実行されない
if(中身を確認(手元の本) == "カステラの話"){
//カステラの話の場合
読みたい本 = 手元の本;
break; //見つかったから、ほかの本はもう知らない
}
}
勘の鋭い方なら気づいたかもしれません。もちろん、このコードはbreakやcontinueを使わなくても、if文だけで書けてしまいます。 if文のページでも言いましたが、プログラムには書き方がたくさんあります。 意識すべきは、「自分や、ほかの人が見たときに、ぱっと、何をやっているのかわかるコードにすること」です。
C言語で試してみよう
では、簡単にC言語を書いて、実行してみましょう。以下のコードを実行します。
#include <stdio.h>
int main(int argc, char * argv[]) {
for (int i = 0; i < 20; i = i + 1) {
// iが16になったらループをやめる
if (i == 16){
break;
}
// iが5以下の時は、次のループへスキップする
if (i <= 5){
continue;
}
printf("ループ中、i = %d です\n", i);
}
getchar(); //画面がすぐに消えないように
}
これを実行してみましょう。
プログラムの解説をしましょう。for文を用いて、ループを回しています。 そして、iが0から19までループを回す、つまり20回ループするようなfor文になっています。 ただ、結果画面を見てみると、表示されているのはiが6から15の時だけです。
ループの中をよく見てみましょう。まず、iが0から5の間は、二つ目のif文が成り立ち、カッコの中に流れていきます。 そして、continue文が待ち受けています。そのため、i = i + 1を行い、そのままループの先頭に戻ります。
さらに、iが16になったタイミングで、一つ目のif文が成り立ち、break文があります。 そのため、そこでループから抜け出した、だからiが16以降は表示されなかったんですね。
この時間のまとめ
ループの中で使えるbreakとcontinue
break(ブレイク)は「その場でループをやめる」
continue(コンティニュー)は「次のループへスキップする」
次の時間
お疲れさまでした!!
ここまでで、C言語の基本中の基本はおさえられました。
「黒画面ばっかりで面白くねぇえええ」と思っていたそこのあなた、安心してください。
ここからは、いよいよグラフィカルなゲームを作りながら、C言語について勉強していきたいと思います。 次回から何回分かは、少し脱線して、DXライブラリという、新しいツールをインストールしていきたいと思います。 このDXライブラリは、PCゲームを作るうえでのめんどくさいコードを綺麗にまとめてくれているもので、専門用語で「ラッパーライブラリ」といいます。
それでは次回は、DXライブラリをダウンロードして、展開するところまでやっていきましょう。お疲れさまでした。