ループ制御文の共通手法と注意点

■概要

ループ制御文(if、while、do-while)共通で使用できる手法と注意点について説明したいと思います。

■注意点

●無限ループ
	無限ループとはループ系の制御文の条件に対して
	常に真(true)になる値を設定し、無限にループさせる方法のことをいいます。
	意図的に無限ループを設定することもありますが、条件設定を間違えて技術者の意図しない形で
	発生した無限ループはバグとして扱われます。
	以下に無限ループの処理ソースを書いていますがこれを実行すると
	処理が終わらなくなりますので気をつけてください。

	具体例:
		// 変数scoreの値はwhile内では変更されないので無限にループする
		int score = 0;
		while (score < 100) {
			printf("scoreが100未満");
		}
		実行結果:
			「scoreが100未満」が永遠に表示され続ける

■共通手法

●ループを中断する
	while文などのループはbreak文を使用すると途中で中断することができます。
		break文:
			break文はループ処理を中断する場合に使用する
			中断は最も内側のループに適応され、そのループから抜けることができる

	具体例:
		C_0035
		
		実行結果:
			sum = 128

	上の具体例のwhile文は無限ループになっています。
	何もしなければループが終わることはありませんが、while内のif文が真になった場合に
	break文でループを抜けるように設定していますので、このwhileのループは数回で終了します。

●途中の処理をスキップする
	continue文を使用することでcontinue文以下の処理をスキップし、
	次のループを開始させることができます。

		continue文:
			ループ中の処理をスキップし、次のループを開始することができる

	具体例:
		C_0036

		実行結果:
			i = 0
			i = 1
			i = 3

	上のソースではiが5未満の間ループし、iの値を出力するようにしています。
	しかし、途中にif文(iが2または4なら真)を設定しており、
	その中でcontinue文を使用しているため実行結果に「i = 2」と「i = 4」はありません。

●多重ループ
	多重ループとはループ系の構文の中に
	さらにループ系の構文を追加したループのことで入れ子の深さを2重、3重…と
	深くしていくことが可能です。
	※forだけではなく、while、do-whileなども組み合わせが可能です。

		多重ループ具体例:
			for (int i = 0; i < 2; i++) {
				printf("外側のループ%d回目\n", i + 1);
				for (int j = 0; j < 3; j++) {
					printf("\t内側のループ%d回目\n", j + 1);
				}
			}
			実行結果:
				外側のループ1回目
					内側のループ1回目
					内側のループ2回目
					内側のループ3回目
				外側のループ2回目
					内側のループ1回目
					内側のループ2回目
					内側のループ3回目

	多重ループは上の具体例の様に最初のループ処理を1回実行するごとに
	中のループ処理が終了するまで実行されます。