logo

C'de Sonsuz Döngü

Sonsuz döngü nedir?

Sonsuz döngü, döngüyü sonlandırmayan ve döngüyü sonsuza kadar yürüten bir döngü yapısıdır. Aynı zamanda bir denir belirsiz döngü veya bir sonsuz döngü. Ya sürekli bir çıktı üretir ya da hiç çıktı üretmez.

Sonsuz döngü ne zaman kullanılır?

Sonsuz döngü, kullanıcı girişini kabul eden ve kullanıcı uygulamadan manuel olarak çıkana kadar sürekli olarak çıktı üreten uygulamalar için kullanışlıdır. Aşağıdaki durumlarda bu tür bir döngü kullanılabilir:

haritaya karşı ayarla
  • Tüm işletim sistemleri, bazı görevleri yerine getirdikten sonra mevcut olmadığından sonsuz bir döngüde çalışır. Sonsuz döngüden ancak kullanıcı sistemi manuel olarak kapattığında çıkar.
  • Sunucu, istemcinin tüm isteklerine yanıt verdiğinden, tüm sunucular sonsuz bir döngüde çalışır. Yalnızca yöneticinin sunucuyu manuel olarak kapatması durumunda belirsiz bir döngüden çıkar.
  • Tüm oyunlar aynı zamanda sonsuz bir döngüde çalışır. Kullanıcı oyundan çıkana kadar oyun, kullanıcının isteklerini kabul edecektir.

Çeşitli döngü yapıları aracılığıyla sonsuz bir döngü oluşturabiliriz. Sonsuz döngüyü tanımlayacağımız döngü yapıları şunlardır:

  • döngü için
  • döngü sırasında
  • do-while döngüsü
  • açıklamaya git
  • C makroları

Döngü için

bakalım sonsuz 'için' döngü. Aşağıdakiler için tanımdır sonsuz döngü için:

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

Bildiğimiz gibi tüm parçaların 'döngü için isteğe bağlıdır ve yukarıdaki for döngüsünde herhangi bir koşuldan bahsetmedik; yani bu döngü sonsuz kez yürütülecektir.

Bir örnek üzerinden anlayalım.

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

Yukarıdaki kodda 'for' döngüsünü sonsuz kez çalıştırıyoruz, yani 'Merhaba javatpoint' sonsuz olarak görüntülenecektir.

Çıktı

C'de Sonsuz Döngü

döngü sırasında

Şimdi while döngüsü kullanarak sonsuz döngünün nasıl oluşturulacağını göreceğiz. Sonsuz while döngüsünün tanımı şu şekildedir:

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

Yukarıdaki while döngüsünde döngü koşulunun içine '1' koyarız. Sıfırdan farklı herhangi bir tam sayının doğru durumu, '0'ın ise yanlış durumu temsil ettiğini biliyoruz.

Basit bir örneğe bakalım.

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

Yukarıdaki kodda herhangi bir koşul içermediği için sonsuz kez çalışan bir while döngüsü tanımladık. 'i'nin değeri sonsuz sayıda güncellenecektir.

Çıktı

C'de Sonsuz Döngü

do..while döngüsü

yaparken Döngü sonsuz döngüyü oluşturmak için de kullanılabilir. Sonsuzu yaratmanın sözdizimi aşağıdadır yaparken döngü.

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

Yukarıdaki do..while döngüsü, döngü koşulunun içinde '1' değerini sağladığımız için sonsuz koşulu temsil eder. Sıfırdan farklı tamsayıların gerçek durumu temsil ettiğini zaten bildiğimiz için bu döngü sonsuz kez çalışacaktır.

ifadeye git

Sonsuz döngüyü tanımlamak için goto ifadesini de kullanabiliriz.

 infinite_loop; // body statements. goto infinite_loop; 

Yukarıdaki kodda goto ifadesi kontrolü sonsuz döngüye aktarır.

Makrolar

Bir makro sabiti yardımıyla da sonsuz döngü oluşturabiliriz. Bir örnek üzerinden anlayalım.

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

Yukarıdaki kodda 'infinite' adında ve değeri 'for(;;)' olan bir makro tanımladık. Bir programda 'sonsuz' kelimesi geçtiğinde bu kelime 'for(;;)' ile değiştirilecektir.

Çıktı

C'de Sonsuz Döngü

Şu ana kadar sonsuz döngüyü tanımlamanın çeşitli yollarını gördük. Ancak sonsuz döngüden çıkmak için bazı yaklaşımlara ihtiyacımız var. Sonsuz döngüden çıkmak için break ifadesini kullanabiliriz.

Bir örnek üzerinden anlayalım.

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

Yukarıdaki kodda 'n' tuşuna basana kadar sonsuz sayıda çalışacak while döngüsünü tanımladık. While döngüsünün içine 'if' ifadesini ekledik. 'İf' ifadesi break anahtar sözcüğünü içerir ve break anahtar sözcüğü kontrolü döngünün dışına çıkarır.

Kasıtsız sonsuz döngüler

Bazen koddaki hata nedeniyle kasıtsız sonsuz döngülerin meydana geldiği durum ortaya çıkar. Eğer yeni başlıyorsak, onların izini sürmek çok zorlaşıyor. Aşağıda kasıtsız bir sonsuz döngüyü izlemek için bazı önlemler verilmiştir:

  • Noktalı virgülleri dikkatlice incelememiz gerekiyor. Bazen noktalı virgülü yanlış yere koyarız, bu da sonsuz döngüye yol açar.
 #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);>

Yukarıdaki kodda, döngünün sonsuz sayıda yürütülmesine yol açan atama operatörünü (ch='y') kullanıyoruz.

  • Döngünün süresiz olarak yürütülmesine neden olan yanlış döngü koşulunu kullanıyoruz.
 #include int main() { for(int i=1;i&gt;=1;i++) { printf(&apos;hello&apos;); } return 0; } 

Yukarıdaki kod 'for döngüsünü' sonsuz sayıda çalıştıracaktır. Her koşul için her zaman doğru olacak olan (i>=1) koşulunu koyduğumuzda bu, 'merhaba'nın sonsuza kadar basılacağı anlamına gelir.

  • Kullanırken dikkatli olmalıyız kırmak anahtar sözcüğünü iç içe geçmiş döngüde kullanamazsınız çünkü tüm döngünün değil en yakın döngünün yürütülmesini sonlandıracaktır.
 #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++)>

Yukarıdaki kodda, bilgisayar bir kayan nokta değerini gerçek bir değer olarak temsil ettiğinden döngü sonsuz kez çalışacaktır. Bilgisayar 4,0 değerini 3,999999 veya 4,000001 olarak temsil edecektir, dolayısıyla (x !=4,0) koşulu hiçbir zaman yanlış olmayacaktır. Bu problemin çözümü koşulu (k) olarak yazmaktır.<=4.0).< p>

Sonsuz döngüler düzgün yapılmazsa sorunlara neden olabilir kontrollü veya tasarlanmış aşırıya yol açan CPU kaynak tüketimi ve programlarda veya sistemlerde yanıt vermeme. Uygulama mekanizmaları Gerektiğinde sonsuz döngülerden kurtulmak çok önemlidir.

Dahil edilmesi tavsiye edilir çıkış koşulları içinde döngü kasıtsız sonsuz döngüleri önlemek için. Bu koşullar temel alınabilir kullanıcı girişi , belirli olaylar veya bayraklar , veya zaman sınırları . Döngü uygun bir şekilde dahil edilerek sonlandırılacaktır. çıkış koşulları amacını yerine getirdikten veya belirli kriterleri karşıladıktan sonra.

Sonsuz Döngüleri Önleme Teknikleri:

Rağmen sonsuz döngüler ara sıra amaçlanabilir, sıklıkla kasıtsız ve programa neden olabilir donuyor veya kazalar . Programcılar kasıtsız sonsuz döngülerden kaçınmak için aşağıdaki stratejileri kullanabilirler:

Bir sonlandırma koşulu ekleyin: Döngünün sonuçta değerlendirilebilecek bir koşulu olduğundan emin olun. YANLIŞ , izin vererek son .

Bir sayaç kullanın: Yineleme sayısı için bir sınır belirleyin ve her döngü yinelemesinde artan bir sayaç uygulayın. Böylece gerekli koşul sağlanmasa bile döngü eninde sonunda bir noktaya gelecektir. son .

Bir zaman aşımı sistemi tanıtın: Süre sınırına ulaşılması durumunda, döngü durdurulacak. Geçen süreyi ölçmek için bir zamanlayıcı veya sistem işlevlerini kullanın.

Harici veya kullanıcı tarafından sağlanan tetikleyicileri kullanın: Döngüyü belirli kullanıcı girişine veya dış olaylara yanıt olarak sona erecek şekilde tasarlayın.

Bazı durumlarda, sonsuz döngüler özel algoritmalarda kasıtlı olarak kullanılabilir veya sistem düzeyinde işlemler . Örneğin, gerçek zamanlı sistemler veya gömülü sistemler, girdileri izlemek veya belirli görevleri sürekli olarak yürütmek için sonsuz döngülerden yararlanır. Ancak bu tür yönetimlere dikkat edilmelidir. düzgün bir şekilde döngü yapıyor , sistem performansı veya yanıt verme yeteneği üzerinde herhangi bir olumsuz etkinin önlenmesi.

aritmetik mantık Birimi

Modern programlama dilleri ve geliştirme çerçeveleri genellikle sonsuz döngüleri daha verimli bir şekilde ele almak için yerleşik mekanizmalar sunar. Örneğin, Grafik kullanıcı arayüzü (GUI) çerçeveleri programların kullanıcı girişini veya sistem olaylarını beklediği olay odaklı mimariler sağlayarak açık sonsuz döngülere olan ihtiyacı ortadan kaldırır.

Kullanırken dikkatli ve dikkatli olmak önemlidir. sonsuz döngüler . Bunlar yalnızca belirsiz bir döngünün açık ve geçerli bir nedeni olduğunda kullanılmalı ve program veya sistem üzerinde herhangi bir olumsuz etkiyi önlemek için yeterli önlemler alınmalıdır.

Çözüm:

Sonuç olarak, bir sonsuz döngü C'de hiç bitmeyen ve sonsuza kadar çalışmaya devam eden döngüsel bir yapı oluşturur. Farklı döngü yapıları , benzeri for döngüsü, while döngüsü, do-while döngüsü, goto ifadesi veya C makroları , onu üretmek için kullanılabilir. İşletim sistemleri, sunucular ve video oyunlarının tümü, manuel sonlandırılıncaya kadar sürekli insan girdisi ve çıktısı talep ettiğinden sıklıkla sonsuz döngüler kullanır. Öte yandan, kasıtsız sonsuz döngüler özellikle yeni gelenler için tanımlanması zor olan kod kusurları nedeniyle meydana gelebilir.

Dikkatli bir şekilde değerlendirilmesi noktalı virgüller, mantıksal ölçütler , Ve döngü sonlandırma Yanlışlıkla sonsuz döngülerin önlenmesi için gereksinimler gereklidir. Sonsuz döngüler noktalı virgülün yanlış yerleştirilmesinden veya ilişkisel operatörlerin yerine atama operatörlerinin kullanılmasından kaynaklanabilir. Her zaman doğru olarak değerlendirilen yanlış döngü koşulları da aynı şekilde sonsuz döngü . Ayrıca, tarihten bu yana anahtar kelimeyi kır yalnızca en yakın döngüyü sonlandırır, iç içe döngülerde kullanırken dikkatli olunmalıdır. Ayrıca, döngü sonlandırma koşulunun karşılanmasını imkansız hale getirebileceklerinden, kayan noktalı sayılarla çalışırken kayan nokta hataları dikkate alınmalıdır.