logo

Nekonečná smyčka v C

Co je nekonečná smyčka?

Nekonečná smyčka je konstrukce smyčky, která neukončuje smyčku a provádí ji navždy. Nazývá se také an neurčitý smyčka nebo an nekonečný smyčka. Buď produkuje nepřetržitý výstup, nebo žádný výstup.

Kdy použít nekonečnou smyčku

Nekonečná smyčka je užitečná pro ty aplikace, které přijímají uživatelský vstup a generují výstup nepřetržitě, dokud uživatel ručně neopustí aplikaci. Tento typ smyčky lze použít v následujících situacích:

jak blokovat reklamy na youtube na android
  • Všechny operační systémy běží v nekonečné smyčce, protože po provedení nějaké úlohy neexistuje. Vychází z nekonečné smyčky pouze tehdy, když uživatel ručně vypne systém.
  • Všechny servery běží v nekonečné smyčce, protože server odpovídá na všechny požadavky klientů. Vychází z neurčité smyčky pouze tehdy, když administrátor ručně vypne server.
  • Všechny hry také běží v nekonečné smyčce. Hra bude přijímat požadavky uživatelů, dokud uživatel hru neopustí.

Můžeme vytvořit nekonečnou smyčku prostřednictvím různých struktur smyčky. Následují struktury smyček, pomocí kterých definujeme nekonečnou smyčku:

  • pro smyčku
  • zatímco smyčka
  • smyčka do-while
  • přejít na výpis
  • C makra

Pro smyčku

Podívejme se na nekonečné 'pro' smyčka. Následuje definice pro nekonečný pro smyčku:

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

Jak víme, že všechny části smyčka „pro“. jsou volitelné a ve výše uvedené smyčce for jsme nezmínili žádnou podmínku; takže tato smyčka se bude provádět nekonečněkrát.

Pojďme to pochopit na příkladu.

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

Ve výše uvedeném kódu spouštíme smyčku „for“ nekonečněkrát, takže 'Ahoj javatpoint' se bude zobrazovat nekonečně.

Výstup

Nekonečná smyčka v C

zatímco smyčka

Nyní uvidíme, jak vytvořit nekonečnou smyčku pomocí smyčky while. Následuje definice nekonečné smyčky while:

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

Ve výše uvedené smyčce while vložíme '1' do podmínky smyčky. Jak víme, jakékoli nenulové celé číslo představuje pravdivou podmínku, zatímco '0' představuje nepravdivou podmínku.

Podívejme se na jednoduchý příklad.

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

Ve výše uvedeném kódu jsme definovali smyčku while, která běží nekonečněkrát, protože neobsahuje žádnou podmínku. Hodnota 'i' bude aktualizována nekonečněkrát.

Výstup

Nekonečná smyčka v C

do..při smyčka

The dělat, zatímco smyčku lze také použít k vytvoření nekonečné smyčky. Následuje syntaxe pro vytvoření nekonečna dělat, zatímco smyčka.

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

Výše uvedená smyčka do..while představuje nekonečnou podmínku, protože poskytujeme hodnotu '1' uvnitř podmínky smyčky. Protože již víme, že nenulové celé číslo představuje skutečnou podmínku, bude tato smyčka probíhat nekonečněkrát.

goto prohlášení

Můžeme také použít příkaz goto k definování nekonečné smyčky.

 infinite_loop; // body statements. goto infinite_loop; 

Ve výše uvedeném kódu příkaz goto přenáší řízení do nekonečné smyčky.

Makra

Nekonečnou smyčku můžeme vytvořit také pomocí makro konstanty. Pojďme to pochopit na příkladu.

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

Ve výše uvedeném kódu jsme definovali makro pojmenované jako 'nekonečno' a jeho hodnota je 'for(;;)'. Kdykoli se v programu objeví slovo 'nekonečno', bude nahrazeno výrazem 'for(;;)'.

Výstup

Nekonečná smyčka v C

Doposud jsme viděli různé způsoby, jak definovat nekonečnou smyčku. Potřebujeme však nějaký přístup, abychom se dostali z nekonečné smyčky. Abychom vyšli z nekonečné smyčky, můžeme použít příkaz break.

Pojďme to pochopit na příkladu.

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

Ve výše uvedeném kódu jsme definovali cyklus while, který se bude provádět nekonečně mnohokrát, dokud nestiskneme klávesu 'n'. Do cyklu while jsme přidali příkaz 'if'. Příkaz 'if' obsahuje klíčové slovo break a klíčové slovo break vyvádí kontrolu ze smyčky.

Neúmyslné nekonečné smyčky

Někdy nastane situace, kdy kvůli chybě v kódu dojde k nechtěným nekonečným smyčkám. Pokud jsme začátečníci, pak je velmi obtížné je vysledovat. Níže jsou uvedena některá opatření ke sledování neúmyslné nekonečné smyčky:

  • Středníky bychom měli pečlivě prozkoumat. Někdy dáme středník na špatné místo, což vede k nekonečné smyčce.
 #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);>

Ve výše uvedeném kódu používáme operátor přiřazení (ch='y'), který vede k nekonečnému provádění smyčky.

  • Použijeme špatnou podmínku smyčky, která způsobí, že smyčka bude prováděna neomezeně dlouho.
 #include int main() { for(int i=1;i&gt;=1;i++) { printf(&apos;hello&apos;); } return 0; } 

Výše uvedený kód provede nekonečný počet opakování cyklu „for“. Když zadáme podmínku (i>=1), která bude vždy platit pro každou podmínku, znamená to, že 'ahoj' se bude tisknout donekonečna.

  • Při používání bychom měli být opatrní přestávka klíčové slovo ve vnořené smyčce, protože ukončí provádění nejbližší smyčky, nikoli celé smyčky.
 #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++)>

Ve výše uvedeném kódu bude smyčka běžet nekonečněkrát, protože počítač představuje hodnotu s plovoucí desetinnou čárkou jako skutečnou hodnotu. Počítač bude reprezentovat hodnotu 4,0 jako 3,999999 nebo 4,000001, takže podmínka (x !=4,0) nebude nikdy nepravdivá. Řešením tohoto problému je napsat podmínku jako (k<=4.0).< p>

Nekonečné smyčky může způsobit problémy, pokud není správně kontrolované nebo navržený , což vede k nadměrnému Spotřeba prostředků CPU a nereagování programů nebo systémů. Prováděcí mechanismy vymanit se z nekonečných smyček je v případě potřeby zásadní.

Je vhodné zařadit výstupní podmínky v rámci smyčka aby se zabránilo neúmyslným nekonečným smyčkám. Tyto podmínky mohou být založeny na uživatelský vstup , konkrétní události nebo vlajky nebo časové limity . Smyčka bude ukončena začleněním vhodného výstupní podmínky poté, co splní svůj účel nebo splní konkrétní kritéria.

zapouzdřovací program

Techniky, jak zabránit nekonečným smyčkám:

Ačkoli nekonečné smyčky mohou být občas zamýšleny, často jsou nezamýšlený a může způsobit program zamrzne nebo havaruje . Programátoři mohou použít následující strategie, aby se vyhnuli neúmyslným nekonečným smyčkám:

Přidejte podmínku ukončení: Ujistěte se, že smyčka má podmínku, kterou lze nakonec vyhodnotit Nepravdivé , což umožňuje konec .

Použijte počítadlo: Stanovte omezení počtu iterací a implementujte čítač, který se zvyšuje s každou iterací smyčky. Tedy, i když požadovaná podmínka není splněna, smyčka nakonec dojde konec .

Zaveďte systém časového limitu: Pokud je dosaženo časového limitu, smyčka bude zastavena. K měření času, který uplynul, použijte časovač nebo systémové funkce.

Použijte externí nebo uživatelem poskytnuté spouštěče: Navrhněte smyčku tak, aby skončila v reakci na určitý uživatelský vstup nebo vnější události.

V určitých případech nekonečné smyčky mohou být záměrně použity ve specializovaných algoritmech nebo operace na úrovni systému . Například systémy v reálném čase nebo vestavěné systémy využívají nekonečné smyčky k monitorování vstupů nebo nepřetržitému provádění konkrétních úkolů. Na takové řízení je však třeba dávat pozor smyčky správně , aby se zabránilo jakýmkoli nepříznivým účinkům na výkon systému nebo odezvu.

Moderní programovací jazyky a vývojové rámce často nabízejí vestavěné mechanismy pro efektivnější zpracování nekonečných smyček. Například, Rámce grafického uživatelského rozhraní (GUI). poskytují architektury řízené událostmi, kde programy čekají na vstup uživatele nebo systémové události, což eliminuje potřebu explicitních nekonečných smyček.

Při používání je nezbytné dbát opatrnosti a uvážlivosti nekonečné smyčky . Měly by být použity pouze v případě, že existuje jasný a platný důvod pro neomezenou provozní smyčku a musí být zavedena adekvátní ochranná opatření, aby se zabránilo jakémukoli negativnímu dopadu na program nebo systém.

Závěr:

Na závěr, an nekonečná smyčka v C představuje smyčkovou konstrukci, která nikdy nekončí a běží navždy. Odlišný smyčkové struktury , Jako smyčka for, smyčka while, smyčka do-while, příkaz goto nebo makra C , lze použít k jeho výrobě. Operační systémy, servery a videohry často využívají nekonečné smyčky, protože vyžadují neustálý lidský vstup a výstup až do manuálního ukončení. Na druhou stranu, neúmyslné nekonečné smyčky může nastat kvůli chybám v kódu, které je obtížné identifikovat, zejména pro nováčky.

Pečlivé zvážení středníky, logická kritéria , a ukončení smyčky požadavky, aby se zabránilo neúmyslným nekonečným smyčkám. Nekonečné smyčky mohou být výsledkem nesprávného umístění středníku nebo použití operátorů přiřazení namísto relačních operátorů. Falešné podmínky smyčky, které se vždy vyhodnotí jako pravdivé, mohou rovněž vést k nekonečná smyčka . Kromě toho, protože klíčové slovo break ukončí pouze nejbližší smyčku, při jejím použití ve vnořených smyčkách je třeba postupovat opatrně. Kromě toho, protože mohou znemožnit splnění podmínky ukončení smyčky, je třeba při práci s čísly s pohyblivou řádovou čárkou brát v úvahu chyby s pohyblivou řádovou čárkou.