logo

Nieskończona pętla w C

Co to jest nieskończona pętla?

Nieskończona pętla to konstrukcja pętli, która nie kończy pętli i wykonuje ją w nieskończoność. Nazywa się to również nieokreślony pętla lub nieskończony pętla. Wytwarza ciągły sygnał wyjściowy lub nie wytwarza żadnego sygnału wyjściowego.

Kiedy używać nieskończonej pętli

Nieskończona pętla jest przydatna w aplikacjach, które akceptują dane wejściowe użytkownika i generują dane wyjściowe w sposób ciągły, dopóki użytkownik nie opuści aplikacji ręcznie. W następujących sytuacjach można zastosować ten typ pętli:

mvc dla Javy
  • Wszystkie systemy operacyjne działają w nieskończonej pętli, która po wykonaniu jakiegoś zadania nie istnieje. Wychodzi z nieskończonej pętli tylko wtedy, gdy użytkownik ręcznie zamknie system.
  • Wszystkie serwery działają w nieskończonej pętli, gdy serwer odpowiada na wszystkie żądania klientów. Wychodzi z nieskończonej pętli tylko wtedy, gdy administrator ręcznie wyłączy serwer.
  • Wszystkie gry działają również w nieskończonej pętli. Gra będzie akceptować żądania użytkownika, dopóki użytkownik nie opuści gry.

Możemy stworzyć nieskończoną pętlę poprzez różne struktury pętli. Poniżej znajdują się struktury pętli, poprzez które zdefiniujemy nieskończoną pętlę:

  • dla pętli
  • pętla while
  • pętla do-while
  • przejdź do oświadczenia
  • Makra C

Dla pętli

Zobaczmy nieskończone „dla” pętla. Poniżej znajduje się definicja nieskończony dla pętli:

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

Jak wiemy, wszystkie części 'dla pętli są opcjonalne i w powyższej pętli for nie wspomnieliśmy o żadnym warunku; więc ta pętla będzie wykonywana nieskończoną ilość razy.

Rozumiemy na przykładzie.

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

W powyższym kodzie uruchamiamy pętlę „for” nieskończoną ilość razy, tzw „Witaj javatpoint” będzie wyświetlany w nieskończoność.

Wyjście

Nieskończona pętla w C

pętla while

Teraz zobaczymy, jak utworzyć nieskończoną pętlę za pomocą pętli while. Poniżej znajduje się definicja nieskończonej pętli while:

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

W powyższej pętli while do warunku pętli wstawiamy cyfrę 1. Jak wiemy, każda niezerowa liczba całkowita reprezentuje warunek prawdziwy, podczas gdy „0” oznacza warunek fałszywy.

Spójrzmy na prosty przykład.

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

W powyższym kodzie zdefiniowaliśmy pętlę while, która uruchamia się nieskończoną liczbę razy, ponieważ nie zawiera żadnego warunku. Wartość „i” zostanie zaktualizowana nieskończoną liczbę razy.

Wyjście

Nieskończona pętla w C

wykonaj pętlę while

The zrób..podczas pętli można również użyć do utworzenia nieskończonej pętli. Poniżej znajduje się składnia tworzenia nieskończoności zrób..podczas pętla.

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

Powyższa pętla do..while reprezentuje warunek nieskończony, ponieważ wewnątrz warunku pętli podajemy wartość „1”. Jak już wiemy, że niezerowa liczba całkowita reprezentuje warunek prawdziwy, więc ta pętla będzie wykonywana nieskończoną ilość razy.

muszę oświadczenie

Do zdefiniowania nieskończonej pętli możemy także użyć instrukcji goto.

 infinite_loop; // body statements. goto infinite_loop; 

W powyższym kodzie instrukcja goto przekazuje kontrolę do nieskończonej pętli.

Makra

nieskończona pętla

Możemy również utworzyć nieskończoną pętlę za pomocą stałej makro. Rozumiemy na przykładzie.

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

W powyższym kodzie zdefiniowaliśmy makro o nazwie „infinite”, a jego wartość to „for(;;)”. Ilekroć w programie pojawia się słowo „nieskończony”, zostanie ono zastąpione przez „for(;;)”.

Wyjście

Nieskończona pętla w C

Do tej pory widzieliśmy różne sposoby definiowania nieskończonej pętli. Potrzebujemy jednak pewnego podejścia, aby wyjść z nieskończonej pętli. Aby wyjść z nieskończonej pętli, możemy użyć instrukcji break.

Rozumiemy na przykładzie.

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

W powyższym kodzie zdefiniowaliśmy pętlę while, która będzie wykonywana nieskończoną liczbę razy, dopóki nie naciśniemy klawisza „n”. Dodaliśmy instrukcję „if” wewnątrz pętli while. Instrukcja „if” zawiera słowo kluczowe break, a słowo kluczowe break wyprowadza kontrolę z pętli.

Niezamierzone nieskończone pętle

Czasami pojawia się sytuacja, w której z powodu błędu w kodzie pojawiają się niezamierzone nieskończone pętle. Jeśli jesteśmy początkującymi, bardzo trudno jest je wyśledzić. Poniżej znajduje się kilka środków pozwalających prześledzić niezamierzoną nieskończoną pętlę:

  • Powinniśmy uważnie przyjrzeć się średnikom. Czasami stawiamy średnik w niewłaściwym miejscu, co prowadzi do nieskończonej pętli.
 #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);>

W powyższym kodzie używamy operatora przypisania (ch='y'), który prowadzi do wykonania pętli nieskończoną ilość razy.

  • Używamy złego warunku pętli, który powoduje, że pętla będzie wykonywana w nieskończoność.
 #include int main() { for(int i=1;i&gt;=1;i++) { printf(&apos;hello&apos;); } return 0; } 

Powyższy kod wykona pętlę „for” nieskończoną liczbę razy. Ponieważ postawiliśmy warunek (i>=1), który zawsze będzie prawdziwy dla każdego warunku, oznacza to, że „cześć” będzie wypisywane w nieskończoność.

  • Powinniśmy zachować ostrożność podczas korzystania z tzw przerwa słowo kluczowe w zagnieżdżonej pętli, ponieważ zakończy wykonywanie najbliższej pętli, a nie całej pętli.
 #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++)>

W powyższym kodzie pętla będzie wykonywana nieskończoną ilość razy, ponieważ komputer reprezentuje wartość zmiennoprzecinkową jako wartość rzeczywistą. Komputer będzie reprezentował wartość 4,0 jako 3,999999 lub 4,000001, zatem warunek (x !=4,0) nigdy nie będzie fałszywy. Rozwiązaniem tego problemu jest zapisanie warunku jako (k<=4.0).< p>

Nieskończone pętle może powodować problemy, jeśli nie jest prawidłowo kontrolowane Lub zaprojektowany , prowadząc do nadmiernego Zużycie zasobów procesora i brak reakcji programów lub systemów. Mechanizmy wdrażające wyrwanie się z nieskończonych pętli ma kluczowe znaczenie, gdy jest to konieczne.

Wskazane jest uwzględnienie warunki wyjścia w ciągu pętla aby zapobiec niezamierzonym nieskończonym pętlom. Warunki te mogą być oparte na dane wejściowe użytkownika , określone wydarzenia lub flagi , Lub limity czasowe . Pętla zakończy się poprzez włączenie odpowiedniego warunki wyjścia po spełnieniu swojego celu lub spełnieniu określonych kryteriów.

Techniki zapobiegania nieskończonym pętlom:

Chociaż nieskończone pętle czasami mogą być zamierzone, zdarza się to często niezamierzony i może powodować program zawiesza się Lub ulega awarii . Programiści mogą zastosować następujące strategie, aby uniknąć niezamierzonych nieskończonych pętli:

Dodaj warunek zakończenia: Upewnij się, że pętla zawiera warunek, który ostatecznie może zostać oceniony FAŁSZ , pozwalając na to koniec .

Zatrudnij licznik: Ustal limit liczby iteracji i zaimplementuj licznik, który zwiększa się z każdą iteracją pętli. Zatem nawet jeśli wymagany warunek nie zostanie spełniony, pętla ostatecznie osiągnie stan koniec .

Wprowadzenie systemu limitów czasu: W przypadku osiągnięcia limitu czasu, pętla zostanie zatrzymany. Użyj timera lub funkcji systemowych, aby zmierzyć ilość czasu, który upłynął.

Użyj wyzwalaczy zewnętrznych lub dostarczonych przez użytkownika: Zaprojektuj pętlę tak, aby kończyła się w odpowiedzi na określone dane wejściowe użytkownika lub zdarzenia zewnętrzne.

Java int jako ciąg

W szczególnych przypadkach, nieskończone pętle mogą być celowo stosowane w wyspecjalizowanych algorytmach lub operacje na poziomie systemu . Na przykład systemy czasu rzeczywistego lub systemy wbudowane wykorzystują nieskończone pętle do monitorowania danych wejściowych lub ciągłego wykonywania określonych zadań. Należy jednak zachować ostrożność, aby zarządzać takimi pętle prawidłowo , unikając jakiegokolwiek niekorzystnego wpływu na wydajność i czas reakcji systemu.

Nowoczesne języki programowania i frameworki programistyczne często oferują wbudowane mechanizmy umożliwiające wydajniejszą obsługę nieskończonych pętli. Na przykład, Struktury graficznego interfejsu użytkownika (GUI). zapewniają architektury sterowane zdarzeniami, w których programy czekają na dane wejściowe użytkownika lub zdarzenia systemowe, eliminując potrzebę stosowania jawnych nieskończonych pętli.

Podczas stosowania należy zachować ostrożność i dyskrecję nieskończone pętle . Należy je stosować tylko wtedy, gdy istnieje jasny i uzasadniony powód nieskończonej pętli działania i należy wdrożyć odpowiednie zabezpieczenia, aby zapobiec jakiemukolwiek negatywnemu wpływowi na program lub system.

Wniosek:

Podsumowując, an nieskończona pętla w C stanowi konstrukcję pętli, która nigdy się nie kończy i działa w nieskończoność. Różny struktury pętlowe , tak jak pętla for, pętla while, pętla do-while, instrukcja goto lub makra C , można wykorzystać do jego produkcji. Systemy operacyjne, serwery i gry wideo często wykorzystują nieskończone pętle, ponieważ wymagają ciągłego wkładu i wyjścia człowieka, aż do ręcznego zakończenia. Z drugiej strony, niezamierzone nieskończone pętle może się zdarzyć z powodu błędów w kodzie, które są trudne do zidentyfikowania, szczególnie dla nowicjuszy.

Uważne rozważenie średniki, kryteria logiczne , I zakończenie pętli wymagania są wymagane, aby zapobiec niezamierzonym nieskończonym pętlom. Nieskończone pętle mogą wynikać z nieprawidłowego umieszczenia średnika lub użycia operatorów przypisania zamiast operatorów relacyjnych. Warunki fałszywej pętli, które zawsze mają wartość true, mogą również skutkować: nieskończona pętla . Ponadto od przerwać słowo kluczowe kończy tylko najbliższą pętlę, należy zachować ostrożność podczas używania go w zagnieżdżonych pętlach. Ponadto, ponieważ mogą one uniemożliwić spełnienie warunku zakończenia pętli, podczas pracy z liczbami zmiennoprzecinkowymi należy wziąć pod uwagę błędy zmiennoprzecinkowe.