it-swarm.com.de

Einfache while-Schleife mit while (true);

In den Beispielen für C-Programme bin ich oft auf solche Schleifen gestoßen. Was machen diese Schleifen wirklich? 

do {

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

    // Some new condition is checked.

} while(true);

Was ist die Notwendigkeit von while(true); Wird es für Endlosschleifen verwendet? Kann jemand bitte erklären, was die obige Schleife wirklich macht. Ich bin neu in der C-Programmierung

10
Dev

Diese Schleifen werden verwendet, wenn man für immer eine Schleife machen möchte und der Ausbruchzustand aus der Schleife nicht bekannt ist. Zertifizierungsbedingungen werden innerhalb der Schleife zusammen mit einer der Anweisungen break oder return gesetzt, um aus der Schleife zu gelangen. Zum Beispiel:

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

Diese Schleifen sind wie alle anderen while-Schleifen mit der Bedingung, dass die Schleife gestoppt wird, im Rumpf der while-Schleife, andernfalls wird sie für immer ausgeführt (was niemals die Absicht eines Teils des Codes ist, bis dies erforderlich ist). Es hängt von der Logik des Programmierers nur ab, was er/sie tun möchte.

6
Sargam Modak

ja, es wird für Endlosschleifen verwendet. In diesem Fall ist es das Bestreben, das Aussehen einer Bedingung zu unterbrechen

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);
1
Cris
do {
  // code here
} while(true);

Diese Schleife wird endlos ausgeführt und kann zu einem Laufzeitfehler führen, wenn sie nicht gestoppt wird. Wenn Sie diese Art von Schleife ausführen, stellen Sie sicher, dass eine break-Anweisung vorhanden ist, um sicherzustellen, dass Ihre Schleife an einem bestimmten Punkt stoppt.

Ähnlich wie dies

if(condition)
   break;

Wenn Ihr Programm einen Punkt erreicht hat, an dem die Bedingung wahr ist, beendet es automatisch die Do-while-Schleife und fährt mit dem Code fort.

0
krato

In C alle Schleifen Schleife, während eine Bedingung wahr ist. Eine explizite true in der Bedingung bedeutet also wirklich "Schleife, während true wahr ist" und so für immer in einer Schleife.

Diese Schleife ist unendlich und wenn Sie Ihr Programm jemals mit einem solchen Lop beenden wollen, müssen Sie entweder eine break oder eine return (oder in einigen Fällen eine Ausnahme) unter bestimmten Bedingungen in einer solchen Schleife auslösen, sonst wird ein solches Programm niemals beendet.

0

Eine Endlosschleife ist nützlich, wenn die Überprüfung der Stop-Bedingung weder vor (wie bei for und while) noch hinten (wie bei do{}while) erfolgen kann. Stattdessen schleifen Sie einfach für immer und in der Mitte des Codes können Sie eine Bedingung überprüfen und abbrechen: if(something) break;.

0
Bernd Elkemann

manchmal benutzen wir es zum Beispiel:

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

ein Beispiel von Winsock Windows-API, auf diese Weise können Sie von einem Port aus zuhören.

0
La VloZ

Der allgemeine Unterscheidungsfaktor zwischen den folgenden Schleifen:

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

ist, dass ersteres für Schleifen verwendet wird, die null oder mehrmals vorkommen, während letzteres für Schleifen - eine oder mehrere Male ist.

Mit anderen Worten, die Bedingung für while wird zu Beginn der Schleife überprüft, und für do while wird sie am Ende geprüft.

Häufig wird Code angezeigt, bei dem die Entwickler know about do-while nicht scheinen, weil sie schreiben:

result = doSomething();
while (result == NOT_FINISHED) {
    result = doSomething();
}

was könnte besser geschrieben werden als:

do {
    result = doSomething();
} while (result == NOT_FINISHED);

In Ihrem speziellen Fall, in dem die Bedingung immer true ist, ist dies jedoch nicht von Bedeutung. Die folgenden Schleifen sind grundsätzlich gleichwertig (verwenden 1 für den echten Fall):

for (;;) { doSomething(); }
for (;;doSomething());

while (1) { doSomething(); }
do { doSomething(); } while (1);

while (doSomething(),1);

BADPAX: doSomething(); goto BADPAX;

Die erste for-Schleife ist wahrscheinlich die kanonische Methode, eine Endlosschleife auszuführen. Dabei wird die Tatsache ausgenutzt, dass die fortgesetzte Bedingung für die Schleife unterbleibt, wenn sie die Fortführungsbedingung für die Schleife nicht berücksichtigt.

Die zweite for-Schleife bewegt den Schleifenkörper einfach in den pro-Iterations-Teil der for-Anweisung.

Die erste while ist auch manchmal in freier Wildbahn zu sehen, der do-while wahrscheinlich weniger. Der einzige Unterschied besteht hier darin, dass die ersteren Schleifen immer am oberen Ende der Schleife nachprüfen, die letzten Schleifen immer am unteren Ende der Schleife.

Die letzte while-Schleife verwendet den C-Komma-Operator auf eine Weise, die Sie wahrscheinlich nie tun sollten :-)

Letzteres ist heutzutage sehr selten, wird aber wahrscheinlich auf der Ebene des Maschinencodes optimiert.

0
paxdiablo