Was ist eine Endlosschleife?
Eine Endlosschleife ist ein Schleifenkonstrukt, das die Schleife nicht beendet und die Schleife für immer ausführt. Es wird auch ein genannt unbestimmt Schleife oder eine endlos Schleife. Es erzeugt entweder eine kontinuierliche Ausgabe oder keine Ausgabe.
Wann sollte eine Endlosschleife verwendet werden?
Eine Endlosschleife ist für Anwendungen nützlich, die Benutzereingaben akzeptieren und die Ausgabe kontinuierlich generieren, bis der Benutzer die Anwendung manuell verlässt. In folgenden Situationen kann diese Art von Schleife verwendet werden:
Set vs. Karte
- Alle Betriebssysteme laufen in einer Endlosschleife, da sie nach der Ausführung einer Aufgabe nicht mehr existiert. Es kommt nur dann aus einer Endlosschleife heraus, wenn der Benutzer das System manuell herunterfährt.
- Alle Server laufen in einer Endlosschleife, während der Server auf alle Client-Anfragen antwortet. Die Endlosschleife wird nur dann beendet, wenn der Administrator den Server manuell herunterfährt.
- Alle Spiele laufen auch in einer Endlosschleife. Das Spiel akzeptiert die Benutzeranfragen, bis der Benutzer das Spiel verlässt.
Wir können eine Endlosschleife durch verschiedene Schleifenstrukturen erstellen. Im Folgenden sind die Schleifenstrukturen aufgeführt, durch die wir die Endlosschleife definieren:
- for-Schleife
- while-Schleife
- do-while-Schleife
- gehe zur Aussage
- C-Makros
For-Schleife
Mal sehen unendlich 'für' Schleife. Im Folgenden finden Sie die Definition für unendlich for-Schleife:
for(; ;) { // body of the for loop. }
Da wir wissen, dass alle Teile des 'for'-Schleife sind optional, und in der obigen for-Schleife haben wir keine Bedingung erwähnt; Daher wird diese Schleife unendlich oft ausgeführt.
Lassen Sie es uns anhand eines Beispiels verstehen.
#include int main() { for(;;) { printf('Hello javatpoint'); } return 0; }
Im obigen Code führen wir die „for“-Schleife unendlich oft aus „Hallo Javatpoint“ wird unendlich angezeigt.
Ausgabe
while-Schleife
Jetzt werden wir sehen, wie man mithilfe einer While-Schleife eine Endlosschleife erstellt. Das Folgende ist die Definition für die Endlosschleife:
while(1) { // body of the loop.. }
In der obigen while-Schleife setzen wir „1“ in die Schleifenbedingung. Wie wir wissen, stellt jede Ganzzahl ungleich Null die wahre Bedingung dar, während „0“ die falsche Bedingung darstellt.
Schauen wir uns ein einfaches Beispiel an.
#include int main() { int i=0; while(1) { i++; printf('i is :%d',i); } return 0; }
Im obigen Code haben wir eine While-Schleife definiert, die unendlich oft läuft, da sie keine Bedingung enthält. Der Wert von „i“ wird unendlich oft aktualisiert.
Ausgabe
do..while-Schleife
Der tun...während Schleife kann auch zum Erstellen der Endlosschleife verwendet werden. Das Folgende ist die Syntax zum Erstellen des Unendlichen tun...während Schleife.
do { // body of the loop.. }while(1);
Die obige do..while-Schleife stellt die Endlosbedingung dar, da wir den Wert „1“ innerhalb der Schleifenbedingung bereitstellen. Da wir bereits wissen, dass eine Ganzzahl ungleich Null die wahre Bedingung darstellt, wird diese Schleife unendlich oft ausgeführt.
goto-Anweisung
Java-Swing
Wir können auch die goto-Anweisung verwenden, um die Endlosschleife zu definieren.
infinite_loop; // body statements. goto infinite_loop;
Im obigen Code überträgt die goto-Anweisung die Steuerung an die Endlosschleife.
Makros
Wir können die Endlosschleife auch mit Hilfe einer Makrokonstante erstellen. Lassen Sie es uns anhand eines Beispiels verstehen.
#include #define infinite for(;;) int main() { infinite { printf('hello'); } return 0; }
Im obigen Code haben wir ein Makro mit dem Namen „infinite“ definiert und sein Wert ist „for(;;)“. Immer wenn das Wort „unendlich“ in einem Programm vorkommt, wird es durch „für(;;)“ ersetzt.
Ausgabe
Bisher haben wir verschiedene Möglichkeiten gesehen, eine Endlosschleife zu definieren. Wir brauchen jedoch einen Ansatz, um aus der Endlosschleife herauszukommen. Um aus der Endlosschleife herauszukommen, können wir die break-Anweisung verwenden.
Lassen Sie es uns anhand eines Beispiels verstehen.
#include int main() { char ch; while(1) { ch=getchar(); if(ch=='n') { break; } printf('hello'); } return 0; }
Im obigen Code haben wir die while-Schleife definiert, die unendlich oft ausgeführt wird, bis wir die Taste „n“ drücken. Wir haben die „if“-Anweisung innerhalb der while-Schleife hinzugefügt. Die „if“-Anweisung enthält das Schlüsselwort „break“, und das Schlüsselwort „break“ bringt die Kontrolle aus der Schleife.
Unbeabsichtigte Endlosschleifen
Manchmal kommt es vor, dass aufgrund eines Fehlers im Code unbeabsichtigte Endlosschleifen auftreten. Wenn wir Anfänger sind, wird es sehr schwierig, sie aufzuspüren. Im Folgenden finden Sie einige Maßnahmen zur Verfolgung einer unbeabsichtigten Endlosschleife:
- Wir sollten die Semikolons sorgfältig untersuchen. Manchmal setzen wir das Semikolon an der falschen Stelle, was zur Endlosschleife führt.
#include int main() { int i=1; while(i<=10); { printf('%d', i); i++; } return 0; < pre> <p>In the above code, we put the semicolon after the condition of the while loop which leads to the infinite loop. Due to this semicolon, the internal body of the while loop will not execute.</p> <ul> <li>We should check the logical conditions carefully. Sometimes by mistake, we place the assignment operator (=) instead of a relational operator (= =).</li> </ul> <pre> #include int main() { char ch='n'; while(ch='y') { printf('hello'); } return 0; } </pre> <p>In the above code, we use the assignment operator (ch='y') which leads to the execution of loop infinite number of times.</p> <ul> <li>We use the wrong loop condition which causes the loop to be executed indefinitely.</li> </ul> <pre> #include int main() { for(int i=1;i>=1;i++) { printf('hello'); } return 0; } </pre> <p>The above code will execute the 'for loop' infinite number of times. As we put the condition (i>=1), which will always be true for every condition, it means that 'hello' will be printed infinitely.</p> <ul> <li>We should be careful when we are using the <strong>break</strong> keyword in the nested loop because it will terminate the execution of the nearest loop, not the entire loop.</li> </ul> <pre> #include int main() { while(1) { for(int i=1;i<=10;i++) { if(i%2="=0)" break; } return 0; < pre> <p>In the above code, the while loop will be executed an infinite number of times as we use the break keyword in an inner loop. This break keyword will bring the control out of the inner loop, not from the outer loop.</p> <ul> <li>We should be very careful when we are using the floating-point value inside the loop as we cannot underestimate the floating-point errors.</li> </ul> <pre> #include int main() { float x = 3.0; while (x != 4.0) { printf('x = %f ', x); x += 0.1; } return 0; } </pre> <p>In the above code, the loop will run infinite times as the computer represents a floating-point value as a real value. The computer will represent the value of 4.0 as 3.999999 or 4.000001, so the condition (x !=4.0) will never be false. The solution to this problem is to write the condition as (k<=4.0).< p> <p> <strong> <em>Infinite loops</em> </strong> can cause problems if it is not properly <strong> <em>controlled</em> </strong> or <strong> <em>designed</em> </strong> , leading to excessive <strong> <em>CPU resource consumption</em> </strong> and unresponsiveness in programs or systems. <strong> <em>Implementing mechanisms</em> </strong> to break out of infinite loops is crucial when necessary.</p> <p>It is advisable to include <strong> <em>exit conditions</em> </strong> within the <strong> <em>loop</em> </strong> to prevent unintentional infinite loops. These conditions can be based on <strong> <em>user input</em> </strong> , <strong> <em>specific events or flags</em> </strong> , or <strong> <em>time limits</em> </strong> . The loop will terminate by incorporating appropriate <strong> <em>exit conditions</em> </strong> after fulfilling its purpose or meeting specific criteria.</p> <h2>Techniques for Preventing Infinite Loops:</h2> <p>Although <strong> <em>infinite loops</em> </strong> can occasionally be intended, they are frequently <strong> <em>unintended</em> </strong> and can cause program <strong> <em>freezes</em> </strong> or <strong> <em>crashes</em> </strong> . Programmers can use the following strategies to avoid inadvertent infinite loops:</p> <p> <strong>Add a termination condition:</strong> Make sure the loop has a condition that can ultimately evaluate to <strong> <em>false</em> </strong> , allowing it to <strong> <em>end</em> </strong> .</p> <p> <strong>Employ a counter:</strong> Establish a cap on the number of iterations and implement a counter that increases with each loop iteration. Thus, even if the required condition is not satisfied, the loop will ultimately come to an <strong> <em>end</em> </strong> .</p> <p> <strong>Introduce a timeout system:</strong> If the time limit is reached, the <strong> <em>loop</em> </strong> will be stopped. Use a timer or system functions to measure the amount of time that has passed.</p> <p> <strong>Use external or user-provided triggers:</strong> Design the loop to end in response to certain user input or outside events.</p> <p>In certain cases, <strong> <em>infinite loops</em> </strong> may be intentionally employed in specialized algorithms or <strong> <em>system-level operations</em> </strong> . For instance, real-time systems or embedded systems utilize infinite loops to monitor inputs or execute specific tasks continuously. However, care must be taken to manage such <strong> <em>loops properly</em> </strong> , avoiding any adverse effects on system performance or responsiveness.</p> <p>Modern programming languages and development frameworks often offer built-in mechanisms to handle infinite loops more efficiently. For example, <strong> <em>Graphical user interface (GUI) frameworks</em> </strong> provide event-driven architectures where programs wait for user input or system events, eliminating the need for explicit infinite loops.</p> <p>It is essential to exercise caution and discretion when using <strong> <em>infinite loops</em> </strong> . They should only be employed when there is a clear and valid reason for an indefinite running loop, and adequate safeguards must be implemented to prevent any negative impact on the program or system.</p> <h2>Conclusion:</h2> <p>In conclusion, an <strong> <em>infinite loop</em> </strong> in C constitutes a looping construct that never ends and keeps running forever. Different <strong> <em>loop structures</em> </strong> , such as the <strong> <em>for loop, while loop, do-while loop, goto statement, or C macros</em> </strong> , can be used to produce it. Operating systems, servers, and video games all frequently employ infinite loops since they demand constant human input and output until manual termination. On the other hand, the <strong> <em>unintentional infinite loops</em> </strong> might happen because of code flaws, which are difficult to identify, especially for newcomers.</p> <p>Careful consideration of <strong> <em>semicolons, logical criteria</em> </strong> , and <strong> <em>loop termination</em> </strong> requirements is required to prevent inadvertent infinite loops. Infinite loops can result from improper semicolon placement or the use of assignment operators in place of relational operators. False loop conditions that always evaluate to true may likewise result in an <strong> <em>infinite loop</em> </strong> . Furthermore, since the <strong> <em>break keyword</em> </strong> only ends the closest loop, caution must be used when using it in nested loops. Furthermore, as they may make the loop termination condition impossible to meet, floating-point mistakes should be considered while working with floating-point numbers.</p> <hr></=4.0).<></p></=10;i++)></pre></=10);>
Im obigen Code verwenden wir den Zuweisungsoperator (ch='y'), der dazu führt, dass die Schleife unendlich oft ausgeführt wird.
- Wir verwenden die falsche Schleifenbedingung, die dazu führt, dass die Schleife auf unbestimmte Zeit ausgeführt wird.
#include int main() { for(int i=1;i>=1;i++) { printf('hello'); } return 0; }
Der obige Code führt die „for-Schleife“ unendlich oft aus. Da wir die Bedingung (i>=1) festlegen, die für jede Bedingung immer wahr ist, bedeutet dies, dass „Hallo“ unendlich oft gedruckt wird.
- Wir sollten vorsichtig sein, wenn wir das verwenden brechen Schlüsselwort in der verschachtelten Schleife, da dadurch die Ausführung der nächsten Schleife und nicht der gesamten Schleife beendet wird.
#include int main() { while(1) { for(int i=1;i<=10;i++) { if(i%2="=0)" break; } return 0; < pre> <p>In the above code, the while loop will be executed an infinite number of times as we use the break keyword in an inner loop. This break keyword will bring the control out of the inner loop, not from the outer loop.</p> <ul> <li>We should be very careful when we are using the floating-point value inside the loop as we cannot underestimate the floating-point errors.</li> </ul> <pre> #include int main() { float x = 3.0; while (x != 4.0) { printf('x = %f ', x); x += 0.1; } return 0; } </pre> <p>In the above code, the loop will run infinite times as the computer represents a floating-point value as a real value. The computer will represent the value of 4.0 as 3.999999 or 4.000001, so the condition (x !=4.0) will never be false. The solution to this problem is to write the condition as (k<=4.0).< p> <p> <strong> <em>Infinite loops</em> </strong> can cause problems if it is not properly <strong> <em>controlled</em> </strong> or <strong> <em>designed</em> </strong> , leading to excessive <strong> <em>CPU resource consumption</em> </strong> and unresponsiveness in programs or systems. <strong> <em>Implementing mechanisms</em> </strong> to break out of infinite loops is crucial when necessary.</p> <p>It is advisable to include <strong> <em>exit conditions</em> </strong> within the <strong> <em>loop</em> </strong> to prevent unintentional infinite loops. These conditions can be based on <strong> <em>user input</em> </strong> , <strong> <em>specific events or flags</em> </strong> , or <strong> <em>time limits</em> </strong> . The loop will terminate by incorporating appropriate <strong> <em>exit conditions</em> </strong> after fulfilling its purpose or meeting specific criteria.</p> <h2>Techniques for Preventing Infinite Loops:</h2> <p>Although <strong> <em>infinite loops</em> </strong> can occasionally be intended, they are frequently <strong> <em>unintended</em> </strong> and can cause program <strong> <em>freezes</em> </strong> or <strong> <em>crashes</em> </strong> . Programmers can use the following strategies to avoid inadvertent infinite loops:</p> <p> <strong>Add a termination condition:</strong> Make sure the loop has a condition that can ultimately evaluate to <strong> <em>false</em> </strong> , allowing it to <strong> <em>end</em> </strong> .</p> <p> <strong>Employ a counter:</strong> Establish a cap on the number of iterations and implement a counter that increases with each loop iteration. Thus, even if the required condition is not satisfied, the loop will ultimately come to an <strong> <em>end</em> </strong> .</p> <p> <strong>Introduce a timeout system:</strong> If the time limit is reached, the <strong> <em>loop</em> </strong> will be stopped. Use a timer or system functions to measure the amount of time that has passed.</p> <p> <strong>Use external or user-provided triggers:</strong> Design the loop to end in response to certain user input or outside events.</p> <p>In certain cases, <strong> <em>infinite loops</em> </strong> may be intentionally employed in specialized algorithms or <strong> <em>system-level operations</em> </strong> . For instance, real-time systems or embedded systems utilize infinite loops to monitor inputs or execute specific tasks continuously. However, care must be taken to manage such <strong> <em>loops properly</em> </strong> , avoiding any adverse effects on system performance or responsiveness.</p> <p>Modern programming languages and development frameworks often offer built-in mechanisms to handle infinite loops more efficiently. For example, <strong> <em>Graphical user interface (GUI) frameworks</em> </strong> provide event-driven architectures where programs wait for user input or system events, eliminating the need for explicit infinite loops.</p> <p>It is essential to exercise caution and discretion when using <strong> <em>infinite loops</em> </strong> . They should only be employed when there is a clear and valid reason for an indefinite running loop, and adequate safeguards must be implemented to prevent any negative impact on the program or system.</p> <h2>Conclusion:</h2> <p>In conclusion, an <strong> <em>infinite loop</em> </strong> in C constitutes a looping construct that never ends and keeps running forever. Different <strong> <em>loop structures</em> </strong> , such as the <strong> <em>for loop, while loop, do-while loop, goto statement, or C macros</em> </strong> , can be used to produce it. Operating systems, servers, and video games all frequently employ infinite loops since they demand constant human input and output until manual termination. On the other hand, the <strong> <em>unintentional infinite loops</em> </strong> might happen because of code flaws, which are difficult to identify, especially for newcomers.</p> <p>Careful consideration of <strong> <em>semicolons, logical criteria</em> </strong> , and <strong> <em>loop termination</em> </strong> requirements is required to prevent inadvertent infinite loops. Infinite loops can result from improper semicolon placement or the use of assignment operators in place of relational operators. False loop conditions that always evaluate to true may likewise result in an <strong> <em>infinite loop</em> </strong> . Furthermore, since the <strong> <em>break keyword</em> </strong> only ends the closest loop, caution must be used when using it in nested loops. Furthermore, as they may make the loop termination condition impossible to meet, floating-point mistakes should be considered while working with floating-point numbers.</p> <hr></=4.0).<></p></=10;i++)>
Im obigen Code wird die Schleife unendlich oft ausgeführt, da der Computer einen Gleitkommawert als realen Wert darstellt. Der Computer stellt den Wert 4,0 als 3,999999 oder 4,000001 dar, sodass die Bedingung (x !=4,0) niemals falsch sein wird. Die Lösung dieses Problems besteht darin, die Bedingung als (k) zu schreiben<=4.0).< p>
Endlosschleifen kann Probleme verursachen, wenn es nicht ordnungsgemäß funktioniert kontrolliert oder entworfen , was zu übermäßigem führt CPU-Ressourcenverbrauch und mangelnde Reaktionsfähigkeit von Programmen oder Systemen. Implementierungsmechanismen Bei Bedarf ist es entscheidend, aus Endlosschleifen auszubrechen.
Es empfiehlt sich, einzubeziehen Ausstiegsbedingungen innerhalb der Schleife um unbeabsichtigte Endlosschleifen zu verhindern. Diese Bedingungen können zugrunde gelegt werden Benutzereingabe , bestimmte Ereignisse oder Flags , oder Zeitbegrenzungen . Die Schleife wird durch die entsprechende Einbindung beendet Ausstiegsbedingungen nachdem es seinen Zweck erfüllt oder bestimmte Kriterien erfüllt hat.
Techniken zur Verhinderung von Endlosschleifen:
Obwohl Endlosschleifen können gelegentlich beabsichtigt sein, sie sind es häufig unbeabsichtigt und kann Programm verursachen friert ein oder stürzt ab . Programmierer können die folgenden Strategien anwenden, um versehentliche Endlosschleifen zu vermeiden:
Fügen Sie eine Beendigungsbedingung hinzu: Stellen Sie sicher, dass die Schleife eine Bedingung hat, die letztendlich ausgewertet werden kann FALSCH , es zulassen Ende .
Regisseur Karan Johar
Setzen Sie einen Zähler ein: Legen Sie eine Obergrenze für die Anzahl der Iterationen fest und implementieren Sie einen Zähler, der sich mit jeder Schleifeniteration erhöht. Selbst wenn die erforderliche Bedingung nicht erfüllt ist, kommt es letztendlich zu einer Schleife Ende .
Führen Sie ein Timeout-System ein: Bei Erreichen der Frist erfolgt die Schleife wird gestoppt. Verwenden Sie einen Timer oder Systemfunktionen, um die verstrichene Zeit zu messen.
Verwenden Sie externe oder vom Benutzer bereitgestellte Trigger: Entwerfen Sie die Schleife so, dass sie als Reaktion auf bestimmte Benutzereingaben oder externe Ereignisse endet.
In bestimmten Fällen, Endlosschleifen kann absichtlich in speziellen Algorithmen eingesetzt werden oder Operationen auf Systemebene . Beispielsweise nutzen Echtzeitsysteme oder eingebettete Systeme Endlosschleifen, um Eingaben zu überwachen oder bestimmte Aufgaben kontinuierlich auszuführen. Es muss jedoch darauf geachtet werden, damit umzugehen Schleifen richtig , um negative Auswirkungen auf die Systemleistung oder Reaktionsfähigkeit zu vermeiden.
Moderne Programmiersprachen und Entwicklungsframeworks bieten häufig integrierte Mechanismen, um Endlosschleifen effizienter zu verarbeiten. Zum Beispiel, Frameworks für grafische Benutzeroberflächen (GUI). stellen ereignisgesteuerte Architekturen bereit, bei denen Programme auf Benutzereingaben oder Systemereignisse warten, sodass keine expliziten Endlosschleifen erforderlich sind.
Bei der Verwendung ist Vorsicht und Diskretion geboten Endlosschleifen . Sie sollten nur eingesetzt werden, wenn es einen klaren und triftigen Grund für eine unbestimmte Laufzeitschleife gibt und es müssen angemessene Sicherheitsmaßnahmen implementiert werden, um negative Auswirkungen auf das Programm oder System zu verhindern.
Abschluss:
Abschließend ein Endlosschleife in C stellt ein Schleifenkonstrukt dar, das niemals endet und ewig weiterläuft. Anders Schleifenstrukturen , so wie die for-Schleife, while-Schleife, do-while-Schleife, goto-Anweisung oder C-Makros , kann zur Herstellung verwendet werden. Betriebssysteme, Server und Videospiele verwenden alle häufig Endlosschleifen, da sie bis zur manuellen Beendigung ständige menschliche Eingaben und Ausgaben erfordern. Andererseits ist die unbeabsichtigte Endlosschleifen Dies kann aufgrund von Codefehlern passieren, die insbesondere für Neulinge schwer zu erkennen sind.
Sorgfältige Überlegung Semikolons, logische Kriterien , Und Schleifenabschluss Anforderungen sind erforderlich, um unbeabsichtigte Endlosschleifen zu verhindern. Endlosschleifen können durch falsche Platzierung von Semikolons oder die Verwendung von Zuweisungsoperatoren anstelle von Vergleichsoperatoren entstehen. Falsche Schleifenbedingungen, die immer als wahr ausgewertet werden, können ebenfalls zu einer führen Endlosschleife . Darüber hinaus seit der Schlüsselwort break Beendet nur die nächste Schleife. Bei der Verwendung in verschachtelten Schleifen ist Vorsicht geboten. Darüber hinaus sollten Gleitkommafehler bei der Arbeit mit Gleitkommazahlen berücksichtigt werden, da sie dazu führen können, dass die Schleifenbeendigungsbedingung nicht erfüllt werden kann.
=4.0).<>=10;i++)>=10);>