Шта је бесконачна петља?
Бесконачна петља је конструкција петље која не прекида петљу и извршава је заувек. Такође се зове ан неодређен петља или ан бескрајна петља. Он или производи континуирани излаз или га нема.
Када користити бесконачну петљу
Бесконачна петља је корисна за оне апликације које прихватају кориснички унос и генеришу излаз континуирано све док корисник ручно не изађе из апликације. Ова врста петље се може користити у следећим ситуацијама:
дфс алгоритам
- Сви оперативни системи раде у бесконачној петљи јер не постоји након обављања неког задатка. Излази из бесконачне петље само када корисник ручно искључи систем.
- Сви сервери раде у бесконачној петљи док сервер одговара на све захтеве клијената. Излази из неодређене петље само када администратор ручно искључи сервер.
- Све игре се такође одвијају у бесконачној петљи. Игра ће прихватати захтеве корисника све док корисник не изађе из игре.
Можемо креирати бесконачну петљу кроз различите структуре петље. Следе структуре петље кроз које ћемо дефинисати бесконачну петљу:
- за петљу
- вхиле петља
- уради-вхиле петља
- иди на изјаву
- Ц макрои
За петљу
Хајде да видимо бесконачно 'за' петља. Следеће је дефиниција за бесконачан за петљу:
for(; ;) { // body of the for loop. }
Као што знамо да су сви делови 'фор' петља су опциони, ау горњој фор петљи нисмо споменули ниједан услов; тако да ће се ова петља извршавати бесконачно.
Хајде да разумемо кроз пример.
#include int main() { for(;;) { printf('Hello javatpoint'); } return 0; }
У горњем коду покрећемо петљу 'фор' бесконачно, дакле 'Хало Јаватпоинт' биће приказан бесконачно.
Излаз
вхиле петља
Сада ћемо видети како да креирамо бесконачну петљу користећи вхиле петљу. Следеће је дефиниција за бесконачну вхиле петљу:
while(1) { // body of the loop.. }
У горњој вхиле петљи, ставили смо '1' унутар услова петље. Као што знамо да било који цео број који није нула представља тачан услов, док '0' представља нетачан услов.
Погледајмо једноставан пример.
#include int main() { int i=0; while(1) { i++; printf('i is :%d',i); } return 0; }
У горњем коду смо дефинисали вхиле петљу, која ради бесконачно време јер не садржи ниједан услов. Вредност 'и' ће се ажурирати бесконачан број пута.
Излаз
до..вхиле петља
Тхе учинити..док петља се такође може користити за креирање бесконачне петље. Следеће је синтакса за креирање бесконачног учинити..док петља.
do { // body of the loop.. }while(1);
Горе наведена петља до..вхиле представља бесконачан услов пошто обезбеђујемо вредност '1' унутар услова петље. Као што већ знамо да цео број који није нула представља прави услов, тако да ће се ова петља изводити бесконачно.
гото статемент
Такође можемо користити наредбу гото да дефинишемо бесконачну петљу.
infinite_loop; // body statements. goto infinite_loop;
У горњем коду, гото наредба преноси контролу у бесконачну петљу.
Макрои
Такође можемо креирати бесконачну петљу уз помоћ макро константе. Хајде да разумемо кроз пример.
#include #define infinite for(;;) int main() { infinite { printf('hello'); } return 0; }
У горњем коду смо дефинисали макро под називом 'бесконачан', а његова вредност је 'фор(;;)'. Кад год се реч 'бесконачно' појави у програму, она ће бити замењена са 'за(;;)'.
Излаз
До сада смо видели различите начине за дефинисање бесконачне петље. Међутим, потребан нам је неки приступ да изађемо из бесконачне петље. Да бисмо изашли из бесконачне петље, можемо користити наредбу бреак.
Хајде да разумемо кроз пример.
#include int main() { char ch; while(1) { ch=getchar(); if(ch=='n') { break; } printf('hello'); } return 0; }
У горњем коду смо дефинисали вхиле петљу, која ће се извршавати бесконачан број пута док не притиснемо тастер 'н'. Додали смо наредбу 'иф' унутар вхиле петље. Наредба 'иф' садржи кључну реч бреак, а кључна реч бреак извлачи контролу из петље.
Ненамерне бесконачне петље
Понекад се јавља ситуација у којој долази до ненамерних бесконачних петљи због грешке у коду. Ако смо почетници, онда нам постаје веома тешко ући у траг. Испод су неке мере за праћење ненамерне бесконачне петље:
вхиле петља јава
- Требало би пажљиво да испитамо тачке и зарезе. Понекад ставимо тачку и зарез на погрешно место, што води до бесконачне петље.
#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);>
У горњем коду користимо оператор доделе (цх='и') који доводи до извршавања петље бесконачан број пута.
- Користимо погрешан услов петље који узрокује да се петља извршава неограничено.
#include int main() { for(int i=1;i>=1;i++) { printf('hello'); } return 0; }
Горњи код ће извршити 'фор петљу' бесконачан број пута. Како смо поставили услов (и>=1), који ће увек бити тачан за сваки услов, то значи да ће се 'здраво' штампати бесконачно.
- Треба да будемо опрезни када користимо пауза кључну реч у угнежђеној петљи јер ће прекинути извршавање најближе петље, а не целе петље.
#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++)>
У горњем коду, петља ће се изводити бесконачно док рачунар представља вредност са помичним зарезом као реалну вредност. Рачунар ће представљати вредност 4.0 као 3.999999 или 4.000001, тако да услов (к !=4.0) никада неће бити нетачан. Решење овог проблема је да се услов запише као (к<=4.0).< p>
Бесконачне петље може изазвати проблеме ако није исправно контролисан или дизајниран , што доводи до прекомерне Потрошња ЦПУ ресурса и нереаговање у програмима или системима. Имплементациони механизми избијање из бесконачних петљи је кључно када је то потребно.
динамичко програмирање
Препоручљиво је укључити услови изласка у оквиру петља да спречи ненамерне бесконачне петље. Ови услови се могу заснивати на кориснички унос , одређене догађаје или заставе , или временске границе . Петља ће се завршити укључивањем одговарајућег услови изласка након што испуни своју сврху или испуни одређене критеријуме.
Технике за спречавање бесконачних петљи:
Мада бесконачне петље повремено могу бити намењени, често су ненамерно и може изазвати програм смрзава или руши . Програмери могу да користе следеће стратегије да избегну ненамерне бесконачне петље:
Додајте услов раскида: Уверите се да петља има услов који се на крају може проценити лажно , дозвољавајући то крај .
Запослите шалтер: Успоставите ограничење броја итерација и примените бројач који се повећава са сваком итерацијом петље. Дакле, чак и ако тражени услов није задовољен, петља ће на крају доћи до ан крај .
Уведите систем тајм-аута: Ако је временско ограничење достигнуто, петља биће заустављен. Користите тајмер или системске функције за мерење времена које је прошло.
Користите спољне покретаче или покретаче које обезбеђује корисник: Дизајнирајте петљу да се заврши као одговор на одређени кориснички унос или вањске догађаје.
У одређеним случајевима, бесконачне петље могу се намерно користити у специјализованим алгоритмима или операције на нивоу система . На пример, системи у реалном времену или уграђени системи користе бесконачне петље за праћење улаза или континуирано извршавање одређених задатака. Међутим, мора се водити рачуна о управљању таквима петље правилно , избегавајући било какве негативне ефекте на перформансе система или одзив.
Савремени програмски језици и развојни оквири често нуде уграђене механизме за ефикасније руковање бесконачним петљама. На пример, Оквири графичког корисничког интерфејса (ГУИ). обезбеђују архитектуре вођене догађајима где програми чекају на кориснички унос или системске догађаје, елиминишући потребу за експлицитним бесконачним петљама.
Неопходно је бити опрезан и дискретан приликом употребе бесконачне петље . Требало би да се користе само када постоји јасан и ваљан разлог за неограничену петљу рада, а морају се применити адекватне мере заштите да би се спречио било какав негативан утицај на програм или систем.
Закључак:
У закључку, ан бесконачна петља у Ц представља конструкцију петље која се никада не завршава и наставља да ради заувек. Различит структуре петље , као што је фор петља, вхиле петља, до-вхиле петља, гото изјава или Ц макрои , може се користити за његову производњу. Сви оперативни системи, сервери и видео игре често користе бесконачне петље јер захтевају константан људски унос и излаз до ручног прекида. С друге стране, ненамерне бесконачне петље може се догодити због грешака у коду, које је тешко идентификовати, посебно за новајлије.
Пажљиво разматрање тачка и зарез, логички критеријуми , и завршетак петље захтевају се захтеви за спречавање ненамерних бесконачних петљи. Бесконачне петље могу бити резултат неправилног постављања тачке и зарезе или употребе оператора доделе уместо релационих оператора. Лажни услови петље који увек процењују тачно могу такође резултирати бесконачна петља . Штавише, пошто је бреак кључна реч завршава само најближу петљу, мора бити опрезан када се користи у угнежђеним петљама. Штавише, пошто могу да онемогуће испуњавање услова завршетка петље, грешке у покретном зарезу треба узети у обзир приликом рада са бројевима са помичним зарезом.
=4.0).<>=10;i++)>=10);>