10

C プログラムの例で何度も、この種のループに出くわしました。この種のループは実際に何をするのでしょうか?

do {

    while (...) // Check some condition if it is true.
    { 
        calculation 1
    }

    // Some new condition is checked.

} while(true);

while(true);無限ループに使用されますか? 誰かが上記のループが実際に何をするのか説明してもらえますか? 私はCプログラミングが初めてです

4

8 に答える 8

6

これらのループは、永遠にループしたいが、ループからの抜け出し条件がわからない場合に使用されます。特定の条件は、ループから抜け出すためのbreakまたはreturnステートメントと共にループ内に設定されます。例えば:

while(true){
    //run this code
    if(condition satisfies)
        break;    //return;
}

これらのループは、ループを停止する条件が while ループの本体にある他の while ループと同じです。それ以外の場合は、永久に実行されます (必要になるまで、コードの一部の意図ではありません)。プログラマーのロジックに依存するのは、プログラマーが何をしたいかだけです。

于 2015-05-25T14:07:18.650 に答える
1

はい、無限ループに使用されます。この場合のベストプラクティスは、条件を見て抜け出すことです

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);
于 2013-02-18T10:50:33.277 に答える
0

次のループ間の一般的な差別化要因:

while (condition) {action}
do {action} while (condition)

前者は0回以上発生するループに使用され、後者は1回以上発生するループに使用されます。

つまり、条件 forwhileはループの開始時にチェックされ、 for はループdo whileの最後にチェックされます。

多くの場合、開発者が書いていることを知らないように見えるコードが表示され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 のコンマ演算子を、おそらく絶対にすべきではない方法で使用しています :-)

最後の 1 つは、最近では非常にまれですが、おそらくマシン コード レベルで最適化されたものです。

于 2015-01-22T07:17:29.903 に答える
0

たとえば、次のように使用することがあります。

do
     recv(s , &buf, len, flags);
while(true)

winsock windows api の例です。このようにして、ポートからリッスンできます。

于 2013-02-18T11:30:48.083 に答える
0

C では、条件が true の間、すべてのループがループします。したがって、条件の明示trueは実際には「truetrue のときにループする」ことを意味するため、永久にループします。

于 2013-02-18T10:51:25.103 に答える
0

このループは無限であり、プログラムがそのような lop で終了する場合は、そのようなループ内の特定の条件下で、breakまたは(場合によっては例外をスローする) ステートメントが必要です。そうしないと、そのようなプログラムは決して終了しません。return

于 2013-02-18T10:52:10.103 に答える
0

for無限ループは、停止条件のチェックが前 (および のようにwhile) にも後 ( のように) もできない場合に便利ですdo{}while。代わりに、永遠にループし、コードの途中で条件をチェックして break: を行うことができますif(something) break;

于 2013-02-18T10:53:24.590 に答える