breakおよびcontinue演算子は、実行の流れを制御するために繰り返し構造(for、while、do..while)で使用されます。
細部:
breakを使用すると、最も内側のループからのみ抜け出します。gotoと組み合わせると、ロジックに複雑な影響を与えることができます。whileおよびdo..whileループにおけるcontinueの使用は、アクションの順序を考慮しないと、予期しない制御の流れを引き起こす可能性があります。例:
for (int i = 0; i < 5; ++i) { if (i == 2) continue; if (i == 4) break; printf("%d ", i); } // 出力:0 1 3
複雑な式を使用して初期化およびカウンタの更新を行っている場合、continue演算子のあるループはどのように動作しますか?
よくある誤った回答:
continueが発生した場合、ループ構造内のすべての式(例えばforのインクリメント)が実行されないと考える人が多いです。
正しい回答:
forループ内でcontinueが達成された場合、残りのループ本体がスキップされますが、カウンタの更新式(forの三番目の部分)は依然として実行されます:
for (int i = 0; i < 3; printf("step %d ", i), ++i) { if (i == 1) continue; printf("%d ", i); }
出力:
0
step 0
step 1
2
step 2
物語
配列をループしている内部でcontinueを使用し、明示的にカウンタパラメータを更新するのを忘れたため(whileループ内)、無限ループに陥りました。
物語
一致を検索するための入れ子のループが最初の一致でbreakを発生させましたが、プログラマーはループ全体が中断されると期待しており、結果的に他の要素の処理が正しく行われませんでした。
物語
do..while構文で、外側のループがcontinueを使用していたため、次のイテレーションへ移行する前の重要な終了操作がスキップされ、ループ本体の状態が不適切に変更されデータが損失しました。