ループ制御文の共通手法と注意点
概要
ループ制御文(if、while、do-while)共通で使用できる手法と注意点について説明したいと思います。
注意点
ループ制御を行う際には無限ループに気を付けてください。
無限ループ
無限ループとはループ系の制御文の条件に対して
常に真(true)になる値を設定し、無限にループさせる方法のことをいいます。
意図的に無限ループを設定することもありますが、条件設定を間違えて技術者の意図しない形で
発生した無限ループはバグとして扱われます。
以下に無限ループの処理ソースを書いていますがこれを実行すると
処理が終わらなくなりますので気をつけてください。
具体例:
// 変数scoreの値はwhile内では変更されないので無限にループする
int score = 0;
while (score < 100) {
printf("scoreが100未満");
}
実行結果:
「scoreが100未満」が永遠に表示され続ける
共通手法
break文
while文などのループはbreak文を使用すると途中で中断することができます。
break文を使用した場合、最も内側のループに適応されて、
そのループから抜けることができます。
具体例:
実行結果:
sum = 128
上の具体例のwhile文は無限ループになっています。
何もしなければループが終わることはありませんが、while内のif文が真になった場合に
break文でループを抜けるように設定していますので、このwhileのループは数回で終了します。
途中の処理をスキップする
continue文
continue文を使用することでcontinue文以下の処理をスキップし、
次のループを開始させることができます。
具体例
実行結果:
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回実行するごとに
内側のループ処理が終了するまで実行されます。