Cプログラムの例では、このようなループに何度も遭遇しました。これらの種類のループは実際には何をしますか?
_do {
while (...) // Check some condition if it is true.
{
calculation 1
}
// Some new condition is checked.
} while(true);
_
while(true);
の必要性は何ですか?無限ループに使用されますか?上記のループが実際に行うことを誰かが説明できますか? Cプログラミングは初めてです
これらのループは、永久にループしたいが、ループからの脱出条件が不明な場合に使用されます。 Certiain条件は、ループから抜け出すためのbreakまたはreturnステートメントとともにループ内に設定されます。例えば:
while(true){
//run this code
if(condition satisfies)
break; //return;
}
これらのループは、ループを停止するための条件を備えた他のwhileループと同じように、whileループの本体にあります。プログラマのロジックに依存するのは、プログラマがやりたいことだけです。
はい、これは無限ループに使用されます。この場合のベストプラクティスは、条件の外観を壊すことです
do {
while () //check some condition if it is true
{
calculation 1
}
//some new condition is checked,if condition met then break out of loop
} while(true);
do {
// code here
} while(true);
このループは無限に実行され、停止しないと実行時にエラーが発生する可能性があります。これらの種類のループを実行している場合は、ループがどこかの時点で確実に停止するように、必ずbreakステートメントを中に入れてください。
これと同じ
if(condition)
break;
プログラムが条件がtrueになるポイントに到達すると、do-whileループが自動的に終了し、その後のコードに進みます。
Cでは、条件が真である間、すべてのループがループします。したがって、条件内の明示的なtrue
は、実際には「true
がtrueである間ループする」ことを意味するため、永久にループします。
このループは無限であり、プログラムがそのようなlopで終了する場合、break
またはreturn
(または場合によっては例外をスロー)のいずれかのステートメントが、そうでなければ、そのようなループは、そのようなプログラムは決して終了しません。
無限ループは、停止条件のチェックが前(for
とwhile
のように)にも後(_do{}while
_のように)にも実行できない場合に役立ちます。代わりに、永久にループし、コードの途中で条件をチェックしてブレークできます:if(something) break;
。
時々私達はそれを例えば使用します:
do
recv(s , &buf, len, flags);
while(true)
winsock windows apiの例。この方法で、ポートからリッスンできます。
次のループ間の一般的な差別化要因:
while (condition) {action}
do {action} while (condition)
前者はzero以上の回数のループに使用され、後者はone以上の回数のループに使用されるということです。
つまり、ループの開始時にwhile
の条件がチェックされ、do while
の条件が終了時にチェックされます。
多くの場合、開発者がknowについてdo-while
について書いていないように見えるコードが表示されます。
result = doSomething();
while (result == NOT_FINISHED) {
result = doSomething();
}
これは次のように書くことができます。
do {
result = doSomething();
} while (result == NOT_FINISHED);
ただし、条件が常にtrue
である特定のケースでは、実際には問題ではありません。次のループは基本的に同等です(実際の場合は1
を使用)。
for (;;) { doSomething(); }
for (;;doSomething());
while (1) { doSomething(); }
do { doSomething(); } while (1);
while (doSomething(),1);
BADPAX: doSomething(); goto BADPAX;
最初のfor
ループは、無限ループを実行する正規の方法である可能性が高く、ループの継続条件を省略した場合、それは常にtrueであると想定されます。
2番目のfor
ループは、ループ本体をfor
ステートメントの反復ごとの部分に移動するだけです。
最初のwhile
も時々野生で見られますが、do-while
はおそらくあまり見られません。ここでの唯一の違いは、前者はループの上部で永久にチェックし、後者はループの下部で永久にチェックすることです。
最後のwhile
ループは、Cのコンマ演算子を使用して、おそらく決してすべきではない方法を使用しています:-)
この最後のものは、今日では非常にまれですが、おそらくマシンコードレベルですべてを最適化するものです。