Što je beskonačna petlja?
Beskonačna petlja je konstrukcija petlje koja ne prekida petlju i izvršava petlju zauvijek. Također se naziva an neodređeno petlja ili an beskrajan petlja. Proizvodi ili kontinuirani izlaz ili ga nema.
Kada koristiti beskonačnu petlju
Beskonačna petlja je korisna za one aplikacije koje prihvaćaju korisnički unos i neprekidno generiraju izlaz dok korisnik ručno ne izađe iz aplikacije. U sljedećim situacijama može se koristiti ova vrsta petlje:
ubuntu build osnove
- Svi operativni sustavi rade u beskonačnoj petlji jer ona ne postoji nakon obavljanja nekog zadatka. Izlazi iz beskonačne petlje samo kada korisnik ručno isključi sustav.
- Svi poslužitelji rade u beskonačnoj petlji dok poslužitelj odgovara na sve zahtjeve klijenata. Izlazi iz neodređene petlje tek kada administrator ručno isključi poslužitelj.
- Sve se igre također izvode u beskonačnoj petlji. Igra će prihvaćati zahtjeve korisnika sve dok korisnik ne izađe iz igre.
Možemo stvoriti beskonačnu petlju kroz različite strukture petlji. Sljedeće su strukture petlje kroz koje ćemo definirati beskonačnu petlju:
- za petlju
- while petlja
- do-while petlja
- idi na izjavu
- C makronaredbe
Za petlju
Da vidimo beskonačno 'za' petlja. Slijedi definicija za beskonačan za petlju:
for(; ;) { // body of the for loop. }
Kao što znamo da su svi dijelovi 'za' petlja su izborni, au gornjoj for petlji nismo spomenuli nikakav uvjet; tako da će se ova petlja izvršavati beskonačno mnogo puta.
Shvatimo kroz primjer.
#include int main() { for(;;) { printf('Hello javatpoint'); } return 0; }
U gornjem kodu pokrećemo petlju 'for' beskonačno mnogo puta, dakle 'Pozdrav javatpoint' će se prikazivati beskonačno.
Izlaz
while petlja
Sada ćemo vidjeti kako stvoriti beskonačnu petlju koristeći while petlju. Slijedi definicija beskonačne while petlje:
while(1) { // body of the loop.. }
U gornjoj petlji while, stavili smo '1' unutar uvjeta petlje. Kao što znamo da svaki cijeli broj različit od nule predstavlja pravi uvjet dok '0' predstavlja lažni uvjet.
Pogledajmo jednostavan primjer.
#include int main() { int i=0; while(1) { i++; printf('i is :%d',i); } return 0; }
U gornjem kodu definirali smo while petlju koja se izvodi beskonačno jer ne sadrži uvjete. Vrijednost 'i' ažurirat će se beskonačan broj puta.
Izlaz
do..while petlja
The učiniti..dok petlja se također može koristiti za stvaranje beskonačne petlje. Slijedi sintaksa za stvaranje beskonačnog učiniti..dok petlja.
char u string java
do { // body of the loop.. }while(1);
Gornja do..while petlja predstavlja beskonačni uvjet jer pružamo vrijednost '1' unutar uvjeta petlje. Kao što već znamo da cijeli broj različit od nule predstavlja pravi uvjet, tako da će se ova petlja izvoditi beskonačno mnogo puta.
izjava goto
Također možemo koristiti naredbu goto da definiramo beskonačnu petlju.
infinite_loop; // body statements. goto infinite_loop;
U gornjem kodu, naredba goto prenosi kontrolu na beskonačnu petlju.
Makronaredbe
Također možemo stvoriti beskonačnu petlju uz pomoć makro konstante. Shvatimo kroz primjer.
#include #define infinite for(;;) int main() { infinite { printf('hello'); } return 0; }
U gornjem kodu definirali smo makronaredbu pod nazivom 'infinite', a njezina je vrijednost 'for(;;)'. Kad god se riječ 'beskonačno' pojavi u programu, bit će zamijenjena s 'za(;;)'.
Izlaz
Do sada smo vidjeli razne načine za definiranje beskonačne petlje. Međutim, potreban nam je neki pristup da izađemo iz beskonačne petlje. Kako bismo izašli iz beskonačne petlje, možemo koristiti naredbu break.
Shvatimo kroz primjer.
#include int main() { char ch; while(1) { ch=getchar(); if(ch=='n') { break; } printf('hello'); } return 0; }
U gornjem kodu smo definirali while petlju, koja će se izvršavati beskonačan broj puta dok ne pritisnemo tipku 'n'. Dodali smo naredbu 'if' unutar while petlje. Izjava 'if' sadrži ključnu riječ break, a ključna riječ break donosi kontrolu iz petlje.
Nenamjerne beskonačne petlje
Ponekad se dogodi situacija u kojoj dolazi do nenamjernih beskonačnih petlji zbog pogreške u kodu. Ako smo početnici, onda im postaje vrlo teško ući u trag. Ispod su neke mjere za praćenje nenamjerne beskonačne petlje:
- Trebali bismo pažljivo ispitati točku i zarez. Ponekad stavimo točku i zarez na pogrešno mjesto, što dovodi do beskonačne petlje.
#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);>
U gornjem kodu koristimo operator dodjele (ch='y') koji dovodi do izvršavanja petlje beskonačan broj puta.
- Koristimo pogrešan uvjet petlje koji uzrokuje neograničeno izvršavanje petlje.
#include int main() { for(int i=1;i>=1;i++) { printf('hello'); } return 0; }
Gornji kod će izvršiti 'for petlju' beskonačan broj puta. Kako smo postavili uvjet (i>=1), koji će uvijek biti istinit za svaki uvjet, to znači da će se 'zdravo' ispisivati beskonačno.
- Trebamo biti oprezni kada koristimo pauza ključnu riječ u ugniježđenoj petlji jer će prekinuti izvođenje najbliže petlje, a ne cijele petlje.
#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++)>
U gornjem kodu, petlja će se izvoditi beskonačno vrijeme dok računalo predstavlja vrijednost s pomičnim zarezom kao stvarnu vrijednost. Računalo će vrijednost 4.0 predstaviti kao 3.999999 ili 4.000001, tako da uvjet (x !=4.0) nikada neće biti lažan. Rješenje ovog problema je napisati uvjet kao (k<=4.0).< p>
Beskonačne petlje može uzrokovati probleme ako nije ispravno upravljan ili dizajnirani , što dovodi do pretjeranog Potrošnja CPU resursa i nereagiranje u programima ili sustavima. Provedbeni mehanizmi izlazak iz beskonačnih petlji ključan je kada je to potrebno.
Preporučljivo je uključiti izlazni uvjeti unutar petlja kako bi se spriječile nenamjerne beskonačne petlje. Ovi se uvjeti mogu temeljiti na korisnički unos , određene događaje ili zastave , ili vremenska ograničenja . Petlja će prekinuti uključivanjem odgovarajućeg izlazni uvjeti nakon što ispuni svoju svrhu ili ispuni određene kriterije.
grad u uas
Tehnike za sprječavanje beskonačnih petlji:
Iako beskonačne petlje mogu povremeno biti namijenjeni, oni su često nenamjeran i može izazvati program smrzava se ili ruši se . Programeri mogu koristiti sljedeće strategije kako bi izbjegli nenamjerne beskonačne petlje:
Dodajte raskidni uvjet: Uvjerite se da petlja ima uvjet koji u konačnici može procijeniti lažno , dopuštajući da kraj .
Uposlite šalter: Postavite ograničenje broja ponavljanja i implementirajte brojač koji se povećava sa svakom ponavljanjem petlje. Dakle, čak i ako traženi uvjet nije zadovoljen, petlja će na kraju doći do an kraj .
Uvedite sustav vremenskog ograničenja: Ako je vremensko ograničenje dosegnuto, petlja bit će zaustavljen. Koristite mjerač vremena ili funkcije sustava za mjerenje količine vremena koje je prošlo.
Koristite vanjske ili korisničke okidače: Dizajnirajte petlju da završi kao odgovor na određeni korisnički unos ili vanjske događaje.
U određenim slučajevima, beskonačne petlje mogu se namjerno koristiti u specijaliziranim algoritmima ili operacije na razini sustava . Na primjer, sustavi u stvarnom vremenu ili ugrađeni sustavi koriste beskonačne petlje za praćenje ulaza ili kontinuirano izvršavanje specifičnih zadataka. Međutim, potrebno je voditi računa o upravljanju takvima petlje ispravno , izbjegavajući bilo kakve štetne učinke na performanse ili odziv sustava.
Moderni programski jezici i razvojni okviri često nude ugrađene mehanizme za učinkovitije rukovanje beskonačnim petljama. Na primjer, Okviri grafičkog korisničkog sučelja (GUI). pružaju arhitekture vođene događajima gdje programi čekaju korisnički unos ili sistemske događaje, eliminirajući potrebu za eksplicitnim beskonačnim petljama.
Neophodan je oprez i diskrecija prilikom korištenja beskonačne petlje . Treba ih koristiti samo kada postoji jasan i valjan razlog za neodređeno pokretanje petlje, a moraju se implementirati odgovarajuće zaštitne mjere kako bi se spriječio bilo kakav negativan utjecaj na program ili sustav.
Zaključak:
Zaključno, an beskonačna petlja u C-u predstavlja konstrukciju petlje koja nikada ne prestaje i traje zauvijek. Drugačiji petljaste strukture , kao for petlja, while petlja, do-while petlja, goto naredba ili C makronaredbe , može se koristiti za njegovu proizvodnju. Operativni sustavi, poslužitelji i videoigre često koriste beskonačne petlje budući da zahtijevaju stalni ljudski unos i izlaz do ručnog prekida. S druge strane, nenamjerne beskonačne petlje može se dogoditi zbog nedostataka koda, koje je teško prepoznati, posebno za novopridošlice.
Pažljivo razmatranje točka-zarez, logički kriteriji , i završetak petlje zahtjevi su potrebni kako bi se spriječile nenamjerne beskonačne petlje. Beskonačne petlje mogu biti rezultat nepravilnog postavljanja točke sa zarezom ili upotrebe operatora dodjele umjesto relacijskih operatora. Lažni uvjeti petlje koji se uvijek procjenjuju kao istiniti mogu isto tako rezultirati an beskonačna petlja . Nadalje, budući da je prekinuti ključnu riječ završava samo najbližu petlju, potreban je oprez kada se koristi u ugniježđenim petljama. Nadalje, budući da one mogu učiniti nemogućim ispunjavanje uvjeta prekida petlje, treba uzeti u obzir pogreške s pomičnim zarezom pri radu s brojevima s pomičnim zarezom.
=4.0).<>=10;i++)>=10);>