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

概要

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

注意点

ループ制御を行う際には無限ループに気を付けてください。

無限ループ

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

具体例:

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

共通手法

break文

while文などのループは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回実行するごとに 内側のループ処理が終了するまで実行されます。