PC Technique logo

小学校高学年から中学生を対象にした、無料公開中のC言語の入門講座です。

【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ライブラリをダウンロードして、展開するところまでやっていきましょう。お疲れさまでした。