Kas yra begalinė kilpa?
Begalinė kilpa yra kilpinė konstrukcija, kuri nenutraukia ciklo ir vykdo kilpą amžinai. Jis taip pat vadinamas an neterminuota kilpa arba an begalinis kilpa. Jis arba gamina nepertraukiamą išvestį, arba neduoda jokios išvesties.
Kada naudoti begalinę kilpą
Begalinis ciklas yra naudingas toms programoms, kurios priima vartotojo įvestį ir nuolat generuoja išvestį, kol vartotojas rankiniu būdu išeina iš programos. Tokio tipo kilpą galima naudoti šiais atvejais:
java poeilutės funkcija
- Visos operacinės sistemos veikia begaliniu ciklu, nes atlikus tam tikrą užduotį ji neegzistuoja. Jis išeina iš begalinio ciklo tik tada, kai vartotojas rankiniu būdu išjungia sistemą.
- Visi serveriai veikia begaliniu ciklu, nes serveris atsako į visas kliento užklausas. Jis išeina iš neapibrėžto ciklo tik tada, kai administratorius rankiniu būdu išjungia serverį.
- Visi žaidimai taip pat veikia begaliniu ciklu. Žaidimas priims vartotojo užklausas, kol vartotojas išeis iš žaidimo.
Mes galime sukurti begalinę kilpą per įvairias kilpų struktūras. Toliau pateikiamos kilpos struktūros, per kurias apibrėžsime begalinę kilpą:
- už kilpą
- o kilpa
- do-while kilpa
- eikite į pareiškimą
- C makrokomandos
Už kilpą
Pažiūrėkime, begalinis 'už' kilpa. Toliau pateikiamas apibrėžimas begalinis kilpai:
for(; ;) { // body of the for loop. }
Kaip žinome, visos dalys „už“ kilpa yra neprivalomi, o pirmiau pateiktoje cikle nepaminėjome jokios sąlygos; taigi, ši kilpa bus vykdoma be galo daug kartų.
Supraskime per pavyzdį.
#include int main() { for(;;) { printf('Hello javatpoint'); } return 0; }
Aukščiau pateiktame kode „for“ kilpą paleidžiame be galo daug kartų, taigi 'Labas, javatpoint' bus rodomas be galo.
Išvestis
o kilpa
Dabar pamatysime, kaip sukurti begalinę kilpą naudojant ciklą, kai. Toliau pateikiamas begalinio while ciklo apibrėžimas:
while(1) { // body of the loop.. }
Aukščiau pateiktoje while ciklo dalyje į kilpos sąlygą įtraukėme „1“. Kaip žinome, bet koks sveikasis skaičius, kuris nėra nulis, reiškia tikrąją sąlygą, o „0“ reiškia klaidingą sąlygą.
Pažiūrėkime į paprastą pavyzdį.
#include int main() { int i=0; while(1) { i++; printf('i is :%d',i); } return 0; }
Aukščiau pateiktame kode apibrėžėme while kilpą, kuri veikia be galo daug kartų, nes jame nėra jokių sąlygų. „i“ reikšmė bus atnaujinta be galo daug kartų.
Išvestis
daryti..while loop
The daryti..kol kilpa taip pat gali būti naudojama begalinei kilpai sukurti. Toliau pateikiama sintaksė, skirta sukurti begalybę daryti..tuo metu kilpa.
do { // body of the loop.. }while(1);
Aukščiau pateiktas veiksmas..while ciklas reiškia begalinę sąlygą, nes ciklo sąlygoje pateikiame reikšmę „1“. Kaip jau žinome, kad nenulis sveikasis skaičius reiškia tikrąją sąlygą, todėl ši kilpa veiks begalybę kartų.
goto pareiškimas
Begalinei kilpai apibrėžti taip pat galime naudoti teiginį goto.
išimčių tvarkymas java
infinite_loop; // body statements. goto infinite_loop;
Aukščiau pateiktame kode goto sakinys perkelia valdymą į begalinę kilpą.
Makrokomandos
Taip pat galime sukurti begalinę kilpą naudodami makrokonstantą. Supraskime per pavyzdį.
#include #define infinite for(;;) int main() { infinite { printf('hello'); } return 0; }
Aukščiau pateiktame kode apibrėžėme makrokomandą, pavadintą „begalinė“, o jos reikšmė yra „for(;;)“. Kai programoje atsiranda žodis „begalinis“, jis bus pakeistas „for(;;)“.
Išvestis
Iki šiol matėme įvairius būdus, kaip apibrėžti begalinę kilpą. Tačiau mums reikia tam tikro požiūrio, kad išeitume iš begalinės kilpos. Norėdami išeiti iš begalinės kilpos, galime naudoti teiginį break.
Supraskime per pavyzdį.
#include int main() { char ch; while(1) { ch=getchar(); if(ch=='n') { break; } printf('hello'); } return 0; }
Aukščiau pateiktame kode apibrėžėme while kilpą, kuri bus vykdoma be galo daug kartų, kol paspausime klavišą „n“. Mes įtraukėme teiginį „if“ į while kilpą. Teiginyje „if“ yra raktinis žodis „break“, o raktinis žodis „break“ pašalina kontrolę.
Netyčinės begalinės kilpos
Kartais susidaro situacija, kai dėl kodo klaidos atsiranda netyčinės begalinės kilpos. Jei esame pradedantieji, juos atsekti tampa labai sunku. Toliau pateikiamos kelios priemonės, kaip atsekti netyčinę begalinę kilpą:
- Turėtume atidžiai išnagrinėti kabliataškius. Kartais mes dedame kabliataškį netinkamoje vietoje, o tai veda į begalinę kilpą.
#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);>
Aukščiau pateiktame kode mes naudojame priskyrimo operatorių (ch='y'), kuris veda į ciklo vykdymą begalinį skaičių kartų.
- Mes naudojame neteisingą ciklo sąlygą, dėl kurios ciklas vykdomas neribotą laiką.
#include int main() { for(int i=1;i>=1;i++) { printf('hello'); } return 0; }
Aukščiau pateiktas kodas vykdys „ciklą“ be galo daug kartų. Kaip pateikiame sąlygą (i>=1), kuri visada bus teisinga kiekvienai sąlygai, tai reiškia, kad „labas“ bus spausdinama be galo.
- Turėtume būti atsargūs, kai naudojame pertrauka raktinį žodį įdėtoje kilpoje, nes jis nutrauks artimiausios, o ne visos ciklo vykdymą.
#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++)>
Aukščiau pateiktame kode ciklas veiks be galo daug kartų, nes kompiuteris slankiojo kablelio reikšmę pateikia kaip tikrąją vertę. Kompiuteris pateiks 4,0 reikšmę kaip 3,999999 arba 4,000001, todėl sąlyga (x !=4,0) niekada nebus klaidinga. Šios problemos sprendimas yra parašyti sąlygą kaip (k<=4.0).< p>
Begalinės kilpos gali sukelti problemų, jei jis netinkamas kontroliuojamas arba suprojektuoti , sukeliantis pernelyg didelį CPU resursų suvartojimas ir nereaguoja į programas ar sistemas. Įgyvendinimo mechanizmai prireikus labai svarbu išsiveržti iš begalinių kilpų.
Patartina įtraukti išėjimo sąlygos viduje kilpa kad būtų išvengta netyčinių begalinių kilpų. Šios sąlygos gali būti pagrįstos vartotojo įvestis , konkretūs įvykiai ar vėliavos , arba laiko apribojimus . Ciklas baigsis įtraukus atitinkamą išėjimo sąlygos įvykdžius savo tikslą arba įvykdžius konkrečius kriterijus.
Begalinių kilpų prevencijos būdai:
Nors begalinės kilpos kartais gali būti skirti, jie dažnai būna netyčia ir gali sukelti programą užšąla arba avarijos . Programuotojai gali naudoti šias strategijas, kad išvengtų netyčinių begalinių kilpų:
Pridėkite nutraukimo sąlygą: Įsitikinkite, kad kilpa turi sąlygą, kurią galiausiai galima įvertinti klaidinga , leidžiant tai padaryti galas .
Naudokite skaitiklį: Nustatykite iteracijų skaičiaus ribą ir įdiekite skaitiklį, kuris didėja su kiekviena ciklo iteracija. Taigi, net jei reikalaujama sąlyga nėra įvykdyta, ciklas galiausiai pasieks an galas .
Java konvencijų įvardijimas
Įveskite skirtojo laiko sistemą: Pasiekus terminą, kilpa bus sustabdytas. Naudokite laikmatį arba sistemos funkcijas, kad pamatytumėte, kiek laiko praėjo.
Naudokite išorinius arba vartotojo pateiktus aktyviklius: Sukurkite kilpą taip, kad ji baigtųsi reaguojant į tam tikrą vartotojo įvestį arba išorinius įvykius.
Tam tikrais atvejais, begalinės kilpos gali būti sąmoningai naudojami specializuotuose algoritmuose arba sistemos lygio operacijos . Pavyzdžiui, realaus laiko sistemos arba įterptosios sistemos naudoja begalines kilpas, kad galėtų stebėti įvestis arba nuolat vykdyti konkrečias užduotis. Tačiau tokius valdymus reikia pasirūpinti kilpos tinkamai , išvengiant neigiamo poveikio sistemos veikimui ar reagavimui.
Šiuolaikinės programavimo kalbos ir kūrimo sistemos dažnai siūlo integruotus mechanizmus, leidžiančius efektyviau valdyti begalines kilpas. Pavyzdžiui, Grafinės vartotojo sąsajos (GUI) sistemos teikti įvykiais pagrįstą architektūrą, kurioje programos laukia vartotojo įvesties arba sistemos įvykių, todėl nereikia aiškių begalinių ciklų.
Labai svarbu būti atsargiems ir atsargiems naudojant begalinės kilpos . Jie turėtų būti naudojami tik tada, kai yra aiški ir pagrįsta neriboto veikimo ciklo priežastis, ir turi būti įdiegtos atitinkamos apsaugos priemonės, kad būtų išvengta bet kokio neigiamo poveikio programai ar sistemai.
Išvada:
Apibendrinant, an begalinis ciklas C yra kilpinė konstrukcija, kuri niekada nesibaigia ir tęsiasi amžinai. Skirtingas kilpos konstrukcijos , toks kaip ciklas, while ciklas, do-while ciklas, goto pareiškimas arba C makrokomandos , gali būti naudojamas jo gamybai. Operacinės sistemos, serveriai ir vaizdo žaidimai dažnai naudoja begalines kilpas, nes reikalauja nuolatinio žmogaus įvesties ir išvesties iki rankinio nutraukimo. Kita vertus, netyčinės begalinės kilpos gali nutikti dėl kodo trūkumų, kuriuos sunku nustatyti, ypač naujokams.
Kruopštus svarstymas kabliataškiai, loginiai kriterijai , ir kilpos nutraukimas būtini reikalavimai, kad būtų išvengta netyčinių begalinių kilpų. Begalinės kilpos gali atsirasti dėl netinkamo kabliataškio išdėstymo arba priskyrimo operatorių naudojimo vietoje reliacinių operatorių. Klaidingos ciklo sąlygos, kurios visada vertinamos kaip teisingos, taip pat gali sukelti an begalinis ciklas . Be to, kadangi pertraukos raktinis žodis baigia tik artimiausią kilpą, reikia būti atsargiems, kai jį naudojate įdėtose kilpose. Be to, dirbant su slankiojo kablelio skaičiais, reikėtų atsižvelgti į slankiojo kablelio klaidas, kadangi dėl jų kilpos užbaigimo sąlygos gali būti neįmanoma įvykdyti.
=4.0).<>=10;i++)>=10);>