logo

Buclă infinită în C

Ce este bucla infinită?

O buclă infinită este o construcție de buclă care nu termină bucla și execută bucla pentru totdeauna. Se mai numește și an nedefinită buclă sau an fără sfârşit buclă. Fie produce o ieșire continuă, fie nu produce.

Când să folosiți o buclă infinită

O buclă infinită este utilă pentru acele aplicații care acceptă intrarea utilizatorului și generează ieșirea în mod continuu până când utilizatorul iese manual din aplicație. În următoarele situații, acest tip de buclă poate fi utilizat:

operator condițional în java
  • Toate sistemele de operare rulează într-o buclă infinită, deoarece nu există după efectuarea unei sarcini. Iese dintr-o buclă infinită numai atunci când utilizatorul oprește manual sistemul.
  • Toate serverele rulează într-o buclă infinită, deoarece serverul răspunde la toate solicitările clientului. Iese dintr-o buclă nedefinită doar atunci când administratorul închide serverul manual.
  • Toate jocurile rulează, de asemenea, într-o buclă infinită. Jocul va accepta cererile utilizatorului până când utilizatorul iese din joc.

Putem crea o buclă infinită prin diferite structuri de buclă. Următoarele sunt structurile buclei prin care vom defini bucla infinită:

  • pentru buclă
  • buclă while
  • bucla do-while
  • mergi la declarație
  • macro-urile C

Pentru buclă

Să vedem infinit „pentru” buclă. Următoarea este definiția pentru infinit pentru buclă:

 for(; ;) { // body of the for loop. } 

După cum știm că toate părțile bucla „for”. sunt opționale, iar în bucla for de mai sus nu am menționat nicio condiție; deci, această buclă se va executa de infinite ori.

Să înțelegem printr-un exemplu.

 #include int main() { for(;;) { printf('Hello javatpoint'); } return 0; } 

În codul de mai sus, rulăm bucla „for” de infinite ori, deci „Salut javatpoint” va fi afișat la infinit.

Ieșire

Buclă infinită în C

buclă while

Acum, vom vedea cum să creăm o buclă infinită folosind o buclă while. Următoarea este definiția pentru bucla infinită while:

 while(1) { // body of the loop.. } 

În bucla while de mai sus, punem „1” în condiția buclei. După cum știm că orice număr întreg diferit de zero reprezintă condiția adevărată, în timp ce „0” reprezintă condiția falsă.

Să ne uităm la un exemplu simplu.

 #include int main() { int i=0; while(1) { i++; printf('i is :%d',i); } return 0; } 

În codul de mai sus, am definit o buclă while, care rulează de infinite ori, deoarece nu conține nicio condiție. Valoarea lui „i” va fi actualizată de un număr infinit de ori.

Ieșire

Buclă infinită în C

face..while bucla

The face în timp ce bucla poate fi folosită și pentru a crea bucla infinită. Următoarea este sintaxa pentru a crea infinitul face în timp ce buclă.

 do { // body of the loop.. }while(1); 

Cele de mai sus fac..while bucla reprezintă condiția infinită, deoarece oferim valoarea „1” în interiorul condiției buclei. După cum știm deja că întregul diferit de zero reprezintă condiția adevărată, astfel încât această buclă va rula de infinite ori.

Goto declarație

De asemenea, putem folosi instrucțiunea goto pentru a defini bucla infinită.

 infinite_loop; // body statements. goto infinite_loop; 

În codul de mai sus, instrucțiunea goto transferă controlul în bucla infinită.

Macro-uri

De asemenea, putem crea bucla infinită cu ajutorul unei constante macro. Să înțelegem printr-un exemplu.

cheie primară compusă
 #include #define infinite for(;;) int main() { infinite { printf('hello'); } return 0; } 

În codul de mai sus, am definit o macrocomandă numită „infinit”, iar valoarea acesteia este „for(;;)”. Ori de câte ori cuvântul „infinit” apare într-un program, atunci acesta va fi înlocuit cu „for(;;)”.

Ieșire

Buclă infinită în C

Până acum, am văzut diferite moduri de a defini o buclă infinită. Cu toate acestea, avem nevoie de o abordare pentru a ieși din bucla infinită. Pentru a ieși din bucla infinită, putem folosi instrucțiunea break.

Să înțelegem printr-un exemplu.

 #include int main() { char ch; while(1) { ch=getchar(); if(ch=='n') { break; } printf('hello'); } return 0; } 

În codul de mai sus, am definit bucla while, care se va executa de un număr infinit de ori până când apăsăm tasta „n”. Am adăugat instrucțiunea „if” în bucla while. Declarația „dacă” conține cuvântul cheie break, iar cuvântul cheie break scoate controlul din buclă.

Bucle infinite neintenționate

Uneori apare situația în care apar bucle infinite neintenționate din cauza erorii din cod. Dacă suntem începători, atunci devine foarte greu să-i urmărim. Mai jos sunt câteva măsuri pentru a urmări o buclă infinită neintenționată:

  • Ar trebui să examinăm cu atenție punctele și virgulă. Uneori punem punctul și virgulă în locul greșit, ceea ce duce la bucla infinită.
 #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=&apos;n&apos;; while(ch=&apos;y&apos;) { printf(&apos;hello&apos;); } return 0; } </pre> <p>In the above code, we use the assignment operator (ch=&apos;y&apos;) 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&gt;=1;i++) { printf(&apos;hello&apos;); } return 0; } </pre> <p>The above code will execute the &apos;for loop&apos; infinite number of times. As we put the condition (i&gt;=1), which will always be true for every condition, it means that &apos;hello&apos; 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(&apos;x = %f
&apos;, 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);>

În codul de mai sus, folosim operatorul de atribuire (ch='y') care duce la executarea buclei de un număr infinit de ori.

  • Folosim condiția greșită a buclei care face ca bucla să fie executată pe termen nelimitat.
 #include int main() { for(int i=1;i&gt;=1;i++) { printf(&apos;hello&apos;); } return 0; } 

Codul de mai sus va executa „bucla for” de un număr infinit de ori. Pe măsură ce punem condiția (i>=1), care va fi întotdeauna adevărată pentru fiecare condiție, înseamnă că „bună ziua” va fi tipărită la infinit.

  • Ar trebui să fim atenți când folosim pauză cuvânt cheie în bucla imbricată, deoarece va termina execuția celei mai apropiate bucle, nu întreaga buclă.
 #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(&apos;x = %f
&apos;, 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++)>

În codul de mai sus, bucla va rula de infinite ori, deoarece computerul reprezintă o valoare în virgulă mobilă ca valoare reală. Calculatorul va reprezenta valoarea 4,0 ca 3,999999 sau 4,000001, deci condiția (x !=4,0) nu va fi niciodată falsă. Soluția la această problemă este să scrieți condiția ca (k<=4.0).< p>

Bucle infinite poate cauza probleme dacă nu este corect controlat sau proiectat , ceea ce duce la exces Consumul de resurse CPU și lipsa de răspuns în programe sau sisteme. Mecanisme de implementare a ieși din bucle infinite este crucială atunci când este necesar.

Este recomandabil să includeți conditii de iesire în cadrul buclă pentru a preveni buclele infinite neintenționate. Aceste condiții se pot baza pe intrarea utilizatorului , evenimente sau steaguri specifice , sau limite de timp . Bucla se va încheia prin încorporarea corespunzătoare conditii de iesire după îndeplinirea scopului sau îndeplinirea unor criterii specifice.

Tehnici pentru prevenirea buclelor infinite:

Cu toate că bucle infinite pot fi ocazional intenționați, sunt frecvent neintenționat și poate provoca program îngheață sau se prăbușește . Programatorii pot folosi următoarele strategii pentru a evita buclele infinite inadvertente:

Adăugați o condiție de terminare: Asigurați-vă că bucla are o condiție care poate fi evaluată în cele din urmă fals , permițându-i Sfârşit .

Folosiți un contor: Stabiliți un plafon pentru numărul de iterații și implementați un contor care crește cu fiecare iterație a buclei. Astfel, chiar dacă condiția necesară nu este îndeplinită, bucla va ajunge în cele din urmă la un Sfârşit .

Introduceți un sistem de timeout: Dacă se atinge limita de timp, buclă va fi oprit. Utilizați un cronometru sau funcții de sistem pentru a măsura timpul care a trecut.

Utilizați declanșatori externi sau furnizați de utilizator: Proiectați bucla să se termine ca răspuns la anumite intrări ale utilizatorului sau evenimente din exterior.

In anumite cazuri, bucle infinite poate fi folosit în mod intenționat în algoritmi specializați sau operațiuni la nivel de sistem . De exemplu, sistemele în timp real sau sistemele încorporate utilizează bucle infinite pentru a monitoriza intrările sau pentru a executa sarcini specifice în mod continuu. Cu toate acestea, trebuie avut grijă să gestionați astfel de lucruri bucle în mod corespunzător , evitând orice efecte adverse asupra performanței sistemului sau a capacității de răspuns.

număr palindrom

Limbajele de programare moderne și cadrele de dezvoltare oferă adesea mecanisme încorporate pentru a gestiona mai eficient bucle infinite. De exemplu, Cadre de interfață grafică cu utilizatorul (GUI). furnizează arhitecturi bazate pe evenimente în care programele așteaptă intrarea utilizatorului sau evenimente de sistem, eliminând nevoia de bucle infinite explicite.

Este esențial să fiți prudent și discreționat atunci când utilizați bucle infinite . Acestea ar trebui să fie utilizate numai atunci când există un motiv clar și valid pentru o buclă de funcționare nedefinită și trebuie implementate măsuri de protecție adecvate pentru a preveni orice impact negativ asupra programului sau sistemului.

Concluzie:

În concluzie, an buclă infinită în C constituie un construct în buclă care nu se termină niciodată și continuă să ruleze pentru totdeauna. Diferit structuri de buclă , la fel ca bucla for, bucla while, bucla do-while, instrucțiunea goto sau macro-urile C , poate fi folosit pentru a o produce. Sistemele de operare, serverele și jocurile video folosesc frecvent bucle infinite, deoarece necesită intrări și ieșiri umane constante până la terminarea manuală. Pe de altă parte, cel bucle infinite neintenționate s-ar putea întâmpla din cauza defectelor de cod, care sunt greu de identificat, în special pentru noii veniți.

Considerare atentă a punct și virgulă, criterii logice , și terminarea buclei sunt necesare cerințe pentru a preveni buclele infinite inadvertente. Buclele infinite pot rezulta din plasarea necorespunzătoare a punctului și virgulă sau din utilizarea operatorilor de atribuire în locul operatorilor relaționali. Condițiile de buclă false care se evaluează întotdeauna la adevărat pot, de asemenea, să rezulte într-un buclă infinită . Mai mult, din moment ce pauză cheie termină doar bucla cea mai apropiată, trebuie să se folosească prudență atunci când se folosește în bucle imbricate. În plus, deoarece pot face condiția de terminare a buclei imposibil de îndeplinit, greșelile în virgulă mobilă ar trebui luate în considerare atunci când se lucrează cu numere în virgulă mobilă.