logo

Végtelen hurok C-ben

Mi az a végtelen hurok?

A végtelen ciklus egy hurkos konstrukció, amely nem fejezi be a ciklust, és a ciklust örökre végrehajtja. Annak is nevezik határozatlan hurok vagy egy végtelen hurok. Vagy folyamatos kimenetet ad, vagy nincs kimenet.

Mikor használjunk végtelen hurkot

A végtelen hurok azoknál az alkalmazásoknál hasznos, amelyek elfogadják a felhasználói bevitelt, és folyamatosan generálják a kimenetet, amíg a felhasználó manuálisan ki nem lép az alkalmazásból. A következő helyzetekben használható ez a típusú hurok:

java karakterlánc logikai értékre
  • Az összes operációs rendszer egy végtelen ciklusban fut, mivel az nem létezik valamilyen feladat elvégzése után. Csak akkor jön ki a végtelen hurokból, ha a felhasználó manuálisan leállítja a rendszert.
  • Az összes kiszolgáló egy végtelen ciklusban fut, miközben a szerver válaszol az összes ügyfélkérésre. Csak akkor jön ki a határozatlan ciklusból, ha az adminisztrátor manuálisan leállítja a kiszolgálót.
  • Az összes játék végtelen ciklusban fut. A játék addig fogadja a felhasználói kéréseket, amíg a felhasználó ki nem lép a játékból.

Különféle hurokstruktúrákon keresztül végtelen hurkot hozhatunk létre. A következő hurokstruktúrák, amelyeken keresztül meghatározzuk a végtelen hurkot:

  • hurokhoz
  • míg hurok
  • do-while hurok
  • lépjen a nyilatkozatra
  • C makrók

A hurokhoz

Lássuk a végtelen 'for' hurok. A következő a definíció a végtelen ciklushoz:

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

Mint tudjuk, hogy minden része a 'for' hurok opcionálisak, és a fenti for ciklusban nem említettünk semmilyen feltételt; tehát ez a ciklus végtelen ideig fog végrehajtani.

Értsük meg egy példán keresztül.

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

A fenti kódban a 'for' ciklust végtelen ideig futtatjuk, tehát 'Szia javatpoint' végtelenül jelenik meg.

Kimenet

Végtelen hurok C-ben

míg hurok

Most meglátjuk, hogyan lehet végtelen hurkot létrehozni a while ciklus használatával. A következő a végtelen while ciklus definíciója:

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

A fenti while ciklusban '1'-et teszünk a ciklusfeltételbe. Mint tudjuk, bármely nullától eltérő egész szám a valódi feltételt jelenti, míg a '0' a hamis feltételt.

Nézzünk egy egyszerű példát.

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

A fenti kódban definiáltunk egy while ciklust, amely végtelen ideig fut, mivel nem tartalmaz feltételt. Az 'i' értéke végtelen számú alkalommal frissül.

Kimenet

Végtelen hurok C-ben

do..while loop

A csinálni, miközben hurok is használható a végtelen hurok létrehozására. A következő a szintaxis a végtelen létrehozásához csinálni, miközben hurok.

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

A fenti do..while ciklus a végtelen feltételt jelenti, mivel a ciklusfeltételen belül az '1' értéket adjuk meg. Mint már tudjuk, hogy a nullától eltérő egész szám a valódi feltételt jelenti, így ez a ciklus végtelen ideig fog futni.

konvertálja a karakterláncot dátummá

goto nyilatkozat

A goto utasítást használhatjuk a végtelen ciklus meghatározására is.

 infinite_loop; // body statements. goto infinite_loop; 

A fenti kódban a goto utasítás átadja a vezérlést a végtelen ciklusnak.

Makrók

A végtelen hurkot egy makrókonstans segítségével is létrehozhatjuk. Értsük meg egy példán keresztül.

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

A fenti kódban definiáltunk egy 'végtelen' nevű makrót, amelynek értéke 'for(;;)'. Amikor a 'végtelen' szó megjelenik egy programban, akkor a helyére a 'for(;;)' szó kerül.

Kimenet

Végtelen hurok C-ben

Eddig különféle módokat láttunk a végtelen hurok meghatározására. Azonban szükségünk van némi megközelítésre, hogy kilépjünk a végtelen körből. A végtelen ciklusból való kilépéshez használhatjuk a break utasítást.

Értsük meg egy példán keresztül.

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

A fenti kódban definiáltuk a while ciklust, amely végtelen számú alkalommal fog végrehajtani, amíg meg nem nyomjuk az 'n' billentyűt. A while cikluson belül hozzáadtuk az 'if' utasítást. Az „if” utasítás tartalmazza a break kulcsszót, a break kulcsszó pedig kihozza az irányítást a ciklusból.

Véletlen végtelen hurkok

Néha olyan helyzet adódik, amikor a kód hibája miatt nem szándékos végtelen hurkok lépnek fel. Ha kezdők vagyunk, akkor nagyon nehéz lesz a nyomon követni őket. Az alábbiakban felsorolunk néhány intézkedést a nem szándékos végtelen hurok nyomon követésére:

  • Gondosan meg kell vizsgálnunk a pontosvesszőt. Néha rossz helyre tesszük a pontosvesszőt, ami a végtelen ciklushoz vezet.
 #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);>

A fenti kódban a hozzárendelési operátort (ch='y') használjuk, amely a ciklus végtelen számú végrehajtásához vezet.

  • Rossz hurokfeltételt használunk, ami a ciklus végtelen ideig történő végrehajtását okozza.
 #include int main() { for(int i=1;i&gt;=1;i++) { printf(&apos;hello&apos;); } return 0; } 

A fenti kód végtelen számú alkalommal hajtja végre a 'for ciklust'. Ahogy a feltételt (i>=1), amely mindig igaz lesz minden feltételre, ez azt jelenti, hogy a „hello” végtelenségig ki lesz nyomtatva.

  • Vigyáznunk kell, amikor használjuk a szünet kulcsszót a beágyazott ciklusban, mert az a legközelebbi ciklus végrehajtását fejezi be, nem a teljes ciklust.
 #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++)>

A fenti kódban a ciklus végtelen ideig fog futni, mivel a számítógép lebegőpontos értéket képvisel valós értékként. A számítógép a 4.0 értéket 3.999999-ként vagy 4.000001-ként fogja ábrázolni, így a feltétel (x !=4.0) soha nem lesz hamis. A probléma megoldása az, hogy a feltételt (k<=4.0).< p>

Végtelen hurkok problémákat okozhat, ha nem megfelelően működik ellenőrzött vagy tervezett , ami túlzott CPU erőforrás fogyasztás és a programok vagy rendszerek válaszképtelensége. Végrehajtási mechanizmusok a végtelen hurkokból való kitörés kulcsfontosságú, ha szükséges.

Célszerű beletenni kilépési feltételek belül hurok hogy megakadályozzuk a nem szándékos végtelen hurkokat. Ezek a feltételek alapulhatnak felhasználói bevitel , konkrét események vagy zászlók , vagy időkorlátok . A hurok a megfelelő beépítésével véget ér kilépési feltételek céljának teljesítése vagy meghatározott kritériumok teljesítése után.

A végtelen hurkok megelőzésének technikái:

Habár végtelen hurkok alkalmanként szándékosak lehetnek, gyakran azok nem szándékos és okozhat programot lefagy vagy összeomlik . A programozók a következő stratégiákat használhatják a véletlen végtelen hurkok elkerülésére:

különbség a vacsora és a vacsora között

Leállítási feltétel hozzáadása: Győződjön meg arról, hogy a hurok olyan feltétellel rendelkezik, amely végül kiértékelhető hamis , lehetővé téve azt vége .

Használjon számlálót: Határozzon meg egy korlátot az iterációk számára, és valósítson meg egy számlálót, amely minden ciklusiterációval növekszik. Így még akkor is, ha a szükséges feltétel nem teljesül, a ciklus végül egy an vége .

Időtúllépési rendszer bevezetése: Ha eléri a határidőt, a hurok leállítják. Használjon időzítőt vagy rendszerfunkciókat az eltelt idő mérésére.

Használjon külső vagy felhasználó által biztosított triggereket: Tervezze meg úgy a hurkot, hogy bizonyos felhasználói bevitelre vagy külső eseményekre válaszul végződjön.

Bizonyos esetekben, végtelen hurkok szándékosan alkalmazhatók speciális algoritmusokban vagy rendszerszintű műveletek . Például a valós idejű rendszerek vagy a beágyazott rendszerek végtelen hurkokat használnak a bemenetek figyelésére vagy meghatározott feladatok folyamatos végrehajtására. Az ilyenek kezelésére azonban ügyelni kell megfelelően hurkolja , elkerülve a rendszer teljesítményére vagy válaszkészségére gyakorolt ​​káros hatásokat.

A modern programozási nyelvek és fejlesztői keretrendszerek gyakran kínálnak beépített mechanizmusokat a végtelen hurkok hatékonyabb kezelésére. Például, Grafikus felhasználói felület (GUI) keretrendszerek Eseményvezérelt architektúrákat biztosítanak, ahol a programok felhasználói bemenetre vagy rendszereseményekre várnak, így nincs szükség explicit végtelen ciklusokra.

Használata során elengedhetetlen az óvatosság és a diszkréció végtelen hurkok . Ezeket csak akkor szabad alkalmazni, ha egyértelmű és megalapozott oka van a határozatlan idejű futási ciklusnak, és megfelelő biztosítékokat kell bevezetni a programra vagy rendszerre gyakorolt ​​negatív hatások elkerülése érdekében.

Következtetés:

Befejezésül egy végtelen hurok C-ben egy hurkos konstrukció, amely soha nem ér véget, és örökké fut. Különböző hurokszerkezetek , mint például a for loop, while ciklus, do-while ciklus, goto utasítás vagy C makrók , előállításához felhasználható. Az operációs rendszerek, a szerverek és a videojátékok gyakran végtelen hurkot használnak, mivel állandó emberi bevitelt és kimenetet igényelnek a kézi leállításig. Másrészt a nem szándékos végtelen hurkok kódhibák miatt fordulhat elő, amelyeket nehéz azonosítani, különösen az újonnan érkezők számára.

Gondos mérlegelés pontosvessző, logikai kritériumok , és hurokvégződés követelményekre van szükség a véletlen végtelen hurkok elkerülése érdekében. Végtelen hurkok keletkezhetnek a pontosvessző helytelen elhelyezéséből vagy a hozzárendelési operátorok használatából a relációs operátorok helyett. A hamis hurokfeltételek, amelyek mindig igazra értékelődnek, szintén eredményezhetnek egy végtelen hurok . Továbbá mivel a break kulcsszó csak a legközelebbi ciklust fejezi be, óvatosan kell eljárni, ha beágyazott ciklusokban használja. Továbbá, mivel ezek lehetetlenné tehetik a huroklezárási feltétel teljesítését, a lebegőpontos számokkal végzett munka során figyelembe kell venni a lebegőpontos hibákat.