Kas ir bezgalīga cilpa?
Bezgalīga cilpa ir cilpas konstrukcija, kas nepārtrauc cilpu un izpilda cilpu uz visiem laikiem. To sauc arī par an nenoteikts cilpa vai an bezgalīgs cilpa. Tas vai nu rada nepārtrauktu izvadi, vai bez izvades.
Kad izmantot bezgalīgu cilpu
Bezgalīga cilpa ir noderīga tām lietojumprogrammām, kuras pieņem lietotāja ievadi un nepārtraukti ģenerē izvadi, līdz lietotājs manuāli iziet no lietojumprogrammas. Šāda veida cilpu var izmantot šādās situācijās:
strint to int
- Visas operētājsistēmas darbojas bezgalīgā cilpā, jo pēc kāda uzdevuma veikšanas tā nepastāv. Tas iziet no bezgalīgas cilpas tikai tad, kad lietotājs manuāli izslēdz sistēmu.
- Visi serveri darbojas bezgalīgā cilpā, jo serveris atbild uz visiem klienta pieprasījumiem. Tas iziet no nenoteikta cikla tikai tad, kad administrators manuāli izslēdz serveri.
- Visas spēles darbojas arī bezgalīgā ciklā. Spēle pieņems lietotāju pieprasījumus, līdz lietotājs iziet no spēles.
Mēs varam izveidot bezgalīgu cilpu, izmantojot dažādas cilpas struktūras. Tālāk ir norādītas cilpas struktūras, caur kurām mēs definēsim bezgalīgo cilpu:
- cilpai
- kamēr cilpa
- do-while cilpa
- dodieties uz paziņojumu
- C makro
Cilpai
Apskatīsim bezgalīgs 'par' cilpa. Tālāk ir sniegta definīcija bezgalīgs cilpai:
for(; ;) { // body of the for loop. }
Kā mēs zinām, ka visas daļas cilpa 'par'. ir neobligāti, un iepriekš minētajā cilpā mēs neesam minējuši nevienu nosacījumu; tātad šī cilpa tiks izpildīta bezgalīgi daudz reižu.
Sapratīsim, izmantojot piemēru.
#include int main() { for(;;) { printf('Hello javatpoint'); } return 0; }
Iepriekš minētajā kodā mēs palaižam cilpu “for” bezgalīgas reizes, tāpēc 'Sveiks javatpoint' tiks rādīts bezgalīgi.
Izvade
kamēr cilpa
Tagad mēs redzēsim, kā izveidot bezgalīgu cilpu, izmantojot kamēr cilpu. Tālāk ir sniegta bezgalīgās while cilpas definīcija:
while(1) { // body of the loop.. }
Iepriekš minētajā while cilpā cilpas nosacījuma iekšpusē ievietojam “1”. Kā zināms, jebkurš vesels skaitlis, kas nav nulle, apzīmē patieso nosacījumu, savukārt “0” apzīmē nepatiesu nosacījumu.
Apskatīsim vienkāršu piemēru.
#include int main() { int i=0; while(1) { i++; printf('i is :%d',i); } return 0; }
Iepriekš minētajā kodā esam definējuši while cilpu, kas darbojas bezgalīgi ilgi, jo tajā nav neviena nosacījuma. “i” vērtība tiks atjaunināta bezgalīgi daudz reižu.
Izvade
darīt..kamēr cilpa
The darīt kamēr cilpu var izmantot arī, lai izveidotu bezgalīgu cilpu. Tālāk ir norādīta sintakse bezgalības izveidošanai darīt kamēr cilpa.
do { // body of the loop.. }while(1);
Iepriekš minētais dariet..while cilpa apzīmē bezgalīgu nosacījumu, jo mēs sniedzam vērtību “1” cilpas nosacījuma ietvaros. Kā mēs jau zinām, ka vesels skaitlis, kas nav nulle, atspoguļo patieso nosacījumu, tāpēc šī cilpa darbosies bezgalīgi daudz reizes.
goto paziņojums
romiešu cipari 1-100
Mēs varam arī izmantot goto paziņojumu, lai definētu bezgalīgo cilpu.
infinite_loop; // body statements. goto infinite_loop;
Iepriekš minētajā kodā goto paziņojums nodod kontroli uz bezgalīgo cilpu.
Makro
Bezgalīgo cilpu varam izveidot arī ar makrokonstantes palīdzību. Sapratīsim, izmantojot piemēru.
#include #define infinite for(;;) int main() { infinite { printf('hello'); } return 0; }
Iepriekš minētajā kodā esam definējuši makro ar nosaukumu “bezgalīgs”, un tā vērtība ir “for(;;)”. Ikreiz, kad programmā parādās vārds “bezgalīgs”, tas tiks aizstāts ar “for(;;)”.
Izvade
Līdz šim mēs esam redzējuši dažādus veidus, kā definēt bezgalīgu cilpu. Tomēr mums ir vajadzīga kāda pieeja, lai izkļūtu no bezgalīgās cilpas. Lai izkļūtu no bezgalīgās cilpas, mēs varam izmantot pārtraukuma paziņojumu.
Sapratīsim, izmantojot piemēru.
#include int main() { char ch; while(1) { ch=getchar(); if(ch=='n') { break; } printf('hello'); } return 0; }
Iepriekš minētajā kodā mēs esam definējuši while cilpu, kas tiks izpildīts bezgalīgi daudz reižu, līdz mēs nospiedīsim taustiņu 'n'. Mēs esam pievienojuši paziņojumu “if” cilpas while iekšpusē. Paziņojumā “if” ir ietverts pārtraukuma atslēgvārds, un pārtraukuma atslēgvārds nodrošina kontroli ārpus cikla.
Nejaušas bezgalīgas cilpas
Dažreiz rodas situācija, kad koda kļūdas dēļ rodas netīšas bezgalīgas cilpas. Ja esam iesācēji, tad viņus izsekot kļūst ļoti grūti. Tālāk ir norādīti daži pasākumi, lai izsekotu netīšai bezgalīgai cilpai.
- Mums rūpīgi jāpārbauda semikoli. Dažreiz semikolu ievietojam nepareizā vietā, kas noved pie bezgalīgās cilpas.
#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);>
Iepriekš minētajā kodā mēs izmantojam piešķiršanas operatoru (ch='y'), kas noved pie cilpas izpildes bezgalīgi daudz reižu.
- Mēs izmantojam nepareizu cilpas nosacījumu, kas izraisa cilpas izpildi bezgalīgi.
#include int main() { for(int i=1;i>=1;i++) { printf('hello'); } return 0; }
Iepriekš minētais kods izpildīs “cilpu” bezgalīgi daudz reižu. Kā mēs ievietojam nosacījumu (i>=1), kas vienmēr būs patiess katram nosacījumam, tas nozīmē, ka “sveiki” tiks drukāts bezgalīgi.
- Mums jābūt uzmanīgiem, kad mēs izmantojam pārtraukums atslēgvārds ligzdotajā cilpā, jo tas pārtrauks tuvākās cilpas izpildi, nevis visu cilpu.
#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++)>
Iepriekš minētajā kodā cilpa darbosies bezgalīgi ilgi, jo dators attēlo peldošā komata vērtību kā reālo vērtību. Dators attēlos vērtību 4.0 kā 3.999999 vai 4.000001, tāpēc nosacījums (x !=4.0) nekad nebūs nepatiess. Šīs problēmas risinājums ir rakstīt nosacījumu kā (k<=4.0).< p>
Bezgalīgas cilpas var radīt problēmas, ja tas nav pareizi kontrolēta vai izstrādāts , kas izraisa pārmērīgu CPU resursu patēriņš un nereaģēšana programmās vai sistēmās. Īstenošanas mehānismi nepieciešamības gadījumā ir ļoti svarīgi izlauzties no bezgalīgām cilpām.
Vēlams iekļaut izejas nosacījumi ietvaros cilpa lai novērstu nejaušas bezgalīgas cilpas. Šos nosacījumus var balstīt uz lietotāja ievade , konkrētus notikumus vai karogus , vai laika ierobežojumi . Cilpa tiks pārtraukta, iekļaujot atbilstošu izejas nosacījumi pēc mērķa izpildes vai konkrētu kritēriju izpildes.
Bezgalīgu cilpu novēršanas paņēmieni:
Lai gan bezgalīgas cilpas dažkārt var būt paredzēti, tie ir bieži neparedzēti un var izraisīt programmu sasalst vai avārijas . Programmētāji var izmantot šādas stratēģijas, lai izvairītos no netīšām bezgalīgām cilpām:
Pievienojiet pārtraukšanas nosacījumu: Pārliecinieties, vai cilpai ir nosacījums, kuru galu galā var novērtēt viltus , ļaujot tam beigas .
java versija Linux
Izmantojiet skaitītāju: Nosakiet iterāciju skaita ierobežojumu un ieviesiet skaitītāju, kas palielinās ar katru cilpas iterāciju. Tādējādi, pat ja nepieciešamais nosacījums nav izpildīts, cilpa galu galā nonāks pie an beigas .
Ieviest taimauta sistēmu: Ja termiņš ir sasniegts, cilpa tiks apturēta. Izmantojiet taimeri vai sistēmas funkcijas, lai izmērītu pagājušo laiku.
Izmantojiet ārējos vai lietotāja nodrošinātos aktivizētājus: Izveidojiet cilpu tā, lai tā beigtos, reaģējot uz noteiktu lietotāja ievadi vai ārējiem notikumiem.
Noteiktos gadījumos, bezgalīgas cilpas var apzināti izmantot specializētos algoritmos vai sistēmas līmeņa operācijas . Piemēram, reāllaika sistēmas vai iegultās sistēmas izmanto bezgalīgas cilpas, lai uzraudzītu ievades vai nepārtraukti izpildītu konkrētus uzdevumus. Tomēr ir jārūpējas par šādu pārvaldību cilpas pareizi , izvairoties no jebkādas negatīvas ietekmes uz sistēmas veiktspēju vai reaģētspēju.
Mūsdienu programmēšanas valodas un izstrādes sistēmas bieži piedāvā iebūvētus mehānismus, lai efektīvāk apstrādātu bezgalīgas cilpas. Piemēram, Grafiskā lietotāja interfeisa (GUI) ietvari nodrošināt uz notikumiem balstītas arhitektūras, kurās programmas gaida lietotāja ievadi vai sistēmas notikumus, novēršot vajadzību pēc nepārprotamām bezgalīgām cilpām.
Lietojot, ir svarīgi ievērot piesardzību un piesardzību bezgalīgas cilpas . Tos vajadzētu izmantot tikai tad, ja ir skaidrs un pamatots iemesls nenoteiktai darbības ciklam, un ir jāievieš atbilstoši drošības pasākumi, lai novērstu jebkādu negatīvu ietekmi uz programmu vai sistēmu.
Secinājums:
Noslēgumā an bezgalīga cilpa C ir cilpas konstrukcija, kas nekad nebeidzas un turpina darboties mūžīgi. Savādāk cilpu struktūras , piemēram, for loop, while loop, do-while cilpa, goto paziņojums vai C makro , var izmantot tā ražošanai. Operētājsistēmas, serveri un videospēles bieži izmanto bezgalīgas cilpas, jo tām ir nepieciešama pastāvīga cilvēka ievade un izvade līdz manuālai pārtraukšanai. No otras puses, netīšas bezgalīgas cilpas var rasties koda trūkumu dēļ, kurus ir grūti identificēt, īpaši jaunpienācējiem.
Rūpīgi apsverot semikoli, loģiskie kritēriji , un cilpas izbeigšana prasības ir nepieciešamas, lai novērstu nejaušas bezgalīgas cilpas. Bezgalīgas cilpas var rasties nepareiza semikolu izvietojuma vai piešķiršanas operatoru izmantošanas relāciju operatoru vietā. Viltus cilpas nosacījumi, kas vienmēr tiek novērtēti kā patiesi, var izraisīt arī bezgalīga cilpa . Turklāt kopš pārtraukuma atslēgvārds beidz tikai tuvāko cilpu, jāievēro piesardzība, lietojot to ligzdotās cilpās. Turklāt, tā kā tās var padarīt neiespējamu cilpas izbeigšanas nosacījumu izpildi, ir jāņem vērā peldošā komata kļūdas, strādājot ar peldošā komata skaitļiem.
=4.0).<>=10;i++)>=10);>