logo

حلقة لا نهائية في C

ما هي الحلقة اللانهائية؟

الحلقة اللانهائية عبارة عن بناء متكرر لا ينهي الحلقة وينفذها إلى الأبد. ويسمى أيضًا أن غير محدد حلقة أو بلا نهاية حلقة. إما أنها تنتج مخرجات مستمرة أو لا تنتج أي مخرجات.

متى تستخدم حلقة لا نهائية

تعتبر الحلقة اللانهائية مفيدة لتلك التطبيقات التي تقبل إدخال المستخدم وتقوم بإنشاء الإخراج بشكل مستمر حتى يخرج المستخدم من التطبيق يدويًا. في الحالات التالية، يمكن استخدام هذا النوع من الحلقات:

اصطلاح التسمية لـ Java
  • تعمل كافة أنظمة التشغيل في حلقة لا نهائية، حيث أنها غير موجودة بعد تنفيذ بعض المهام. إنه يخرج من حلقة لا نهائية فقط عندما يقوم المستخدم بإيقاف تشغيل النظام يدويًا.
  • تعمل جميع الخوادم في حلقة لا نهائية حيث يستجيب الخادم لجميع طلبات العميل. ويخرج من حلقة غير محددة فقط عندما يقوم المسؤول بإيقاف تشغيل الخادم يدويًا.
  • تعمل جميع الألعاب أيضًا في حلقة لا نهائية. ستقبل اللعبة طلبات المستخدم حتى يخرج المستخدم من اللعبة.

يمكننا إنشاء حلقة لا نهائية من خلال هياكل حلقة مختلفة. فيما يلي هياكل الحلقة التي سنحدد من خلالها الحلقة اللانهائية:

  • لحلقة
  • حائط اللوب
  • افعل بينما حلقة
  • انتقل إلى البيان
  • وحدات الماكرو C

لحلقة

دعونا نرى لا نهاية لها 'ل' حلقة. وفيما يلي تعريف ل لانهائي لحلقة:

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

كما نعلم أن جميع أجزاء 'لحلقة هي اختيارية، وفي حلقة for أعلاه، لم نذكر أي شرط؛ لذلك، سيتم تنفيذ هذه الحلقة مرات لا حصر لها.

دعونا نفهم من خلال مثال.

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

في الكود أعلاه، قمنا بتشغيل حلقة 'for' مرات لا حصر لها، لذلك 'مرحبًا جافات بوينت' سيتم عرضها إلى ما لا نهاية.

انتاج |

حلقة لا نهائية في C

حائط اللوب

الآن، سوف نرى كيفية إنشاء حلقة لا نهائية باستخدام حلقة while. فيما يلي تعريف حلقة while اللانهائية:

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

في الحلقة السابقة، وضعنا الرقم '1' داخل حالة الحلقة. كما نعلم أن أي عدد صحيح غير الصفر يمثل الشرط الحقيقي بينما يمثل '0' الشرط الخاطئ.

دعونا نلقي نظرة على مثال بسيط.

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

في الكود أعلاه، قمنا بتعريف حلقة while، والتي تعمل مرات لا حصر لها لأنها لا تحتوي على أي شرط. سيتم تحديث قيمة 'i' لعدد لا نهائي من المرات.

انتاج |

حلقة لا نهائية في C

افعل .. أثناء الحلقة

ال افعل اثناء يمكن أيضًا استخدام الحلقة لإنشاء الحلقة اللانهائية. ما يلي هو بناء الجملة لإنشاء لانهائي افعل اثناء حلقة.

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

ما ورد أعلاه do..while تمثل الحلقة الشرط اللانهائي حيث نقدم القيمة '1' داخل شرط الحلقة. كما نعلم بالفعل أن الأعداد الصحيحة غير الصفرية تمثل الحالة الحقيقية، لذلك سيتم تشغيل هذه الحلقة مرات لا حصر لها.

بيان اذهب

يمكننا أيضًا استخدام عبارة goto لتحديد الحلقة اللانهائية.

 infinite_loop; // body statements. goto infinite_loop; 

في الكود أعلاه، تقوم عبارة goto بنقل التحكم إلى الحلقة اللانهائية.

وحدات الماكرو

يمكننا أيضًا إنشاء حلقة لا نهائية بمساعدة ثابت الماكرو. دعونا نفهم من خلال مثال.

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

في الكود أعلاه، قمنا بتعريف ماكرو يسمى 'لانهائي'، وقيمته هي 'for(;;)'. عندما تأتي كلمة 'لانهائي' في برنامج ما، فسيتم استبدالها بـ 'for(;;)'.

انتاج |

حلقة لا نهائية في C

حتى الآن، رأينا طرقًا مختلفة لتحديد الحلقة اللانهائية. ومع ذلك، نحن بحاجة إلى بعض النهج للخروج من الحلقة اللانهائية. من أجل الخروج من الحلقة اللانهائية، يمكننا استخدام عبارة Break.

دعونا نفهم من خلال مثال.

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

في الكود أعلاه، قمنا بتعريف حلقة while، والتي سيتم تنفيذها لعدد لا نهائي من المرات حتى نضغط على المفتاح 'n'. لقد أضفنا عبارة 'if' داخل الحلقة while. تحتوي العبارة 'if' على الكلمة الأساسية 'break'، والكلمة الأساسية 'break' تُخرج التحكم من الحلقة.

حلقات لا نهائية غير مقصودة

في بعض الأحيان ينشأ موقف حيث تحدث حلقات لا نهائية غير مقصودة بسبب خطأ في الكود. إذا كنا مبتدئين، يصبح من الصعب جدًا تتبعهم. فيما يلي بعض التدابير لتتبع حلقة لا نهائية غير مقصودة:

  • يجب علينا فحص الفواصل المنقوطة بعناية. في بعض الأحيان نضع الفاصلة المنقوطة في المكان الخطأ، مما يؤدي إلى الحلقة اللانهائية.
 #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);>

في الكود أعلاه، نستخدم عامل التعيين (ch='y') الذي يؤدي إلى تنفيذ الحلقة لعدد لا نهائي من المرات.

  • نحن نستخدم حالة الحلقة الخاطئة التي تتسبب في تنفيذ الحلقة إلى أجل غير مسمى.
 #include int main() { for(int i=1;i&gt;=1;i++) { printf(&apos;hello&apos;); } return 0; } 

سيقوم الكود أعلاه بتنفيذ عدد لا نهائي من المرات. عندما نضع الشرط (i>=1)، والذي سيكون دائمًا صحيحًا لكل شرط، فهذا يعني أنه سيتم طباعة 'hello' إلى ما لا نهاية.

  • يجب أن نكون حذرين عندما نستخدم استراحة الكلمة الأساسية في الحلقة المتداخلة لأنها ستنهي تنفيذ الحلقة الأقرب، وليس الحلقة بأكملها.
 #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++)>

في الكود أعلاه، سيتم تشغيل الحلقة مرات لا حصر لها حيث يمثل الكمبيوتر قيمة الفاصلة العائمة كقيمة حقيقية. سيمثل الكمبيوتر قيمة 4.0 على أنها 3.999999 أو 4.000001، وبالتالي فإن الشرط (x!=4.0) لن يكون خاطئًا أبدًا. حل هذه المشكلة هو كتابة الشرط بالشكل (k<=4.0).< p>

حلقات لا نهاية لها يمكن أن يسبب مشاكل إذا لم يكن بشكل صحيح خاضع للسيطرة أو مصممة ، مما يؤدي إلى الإفراط استهلاك موارد وحدة المعالجة المركزية وعدم الاستجابة في البرامج أو الأنظمة. آليات التنفيذ يعد الخروج من الحلقات اللانهائية أمرًا بالغ الأهمية عند الضرورة.

من المستحسن أن تشمل شروط الخروج في حدود حلقة لمنع الحلقات اللانهائية غير المقصودة. ويمكن الاعتماد على هذه الشروط إدخال المستخدم , أحداث أو أعلام محددة ، أو حدود الوقت . سيتم إنهاء الحلقة من خلال دمج المناسب شروط الخروج بعد تحقيق غرضها أو استيفاء معايير محددة.

تقنيات منع الحلقات اللانهائية:

بالرغم من حلقات لا نهاية لها يمكن أن يكون المقصود في بعض الأحيان، فهي في كثير من الأحيان غير مقصود ويمكن أن يسبب البرنامج يتجمد أو تعطل . يمكن للمبرمجين استخدام الاستراتيجيات التالية لتجنب الحلقات اللانهائية غير المقصودة:

إضافة شرط الإنهاء: تأكد من أن الحلقة تحتوي على شرط يمكن تقييمه في النهاية خطأ شنيع ، السماح له بذلك نهاية .

توظيف العداد: ضع حدًا أقصى لعدد التكرارات وقم بتنفيذ عداد يزيد مع كل تكرار للحلقة. وبالتالي، حتى لو لم يتم استيفاء الشرط المطلوب، ستصل الحلقة في النهاية إلى مستوى نهاية .

إدخال نظام المهلة: إذا تم الوصول إلى الحد الزمني، فإن حلقة سيتم إيقافها. استخدم مؤقتًا أو وظائف النظام لقياس مقدار الوقت الذي انقضى.

استخدم المشغلات الخارجية أو المقدمة من المستخدم: صمم الحلقة لتنتهي استجابةً لإدخالات مستخدم معينة أو أحداث خارجية.

في بعض الحالات، حلقات لا نهاية لها قد يتم استخدامها عمدا في خوارزميات متخصصة أو العمليات على مستوى النظام . على سبيل المثال، تستخدم أنظمة الوقت الفعلي أو الأنظمة المدمجة حلقات لا نهائية لمراقبة المدخلات أو تنفيذ مهام محددة بشكل مستمر. ومع ذلك، يجب توخي الحذر لإدارة مثل هذا الحلقات بشكل صحيح ، وتجنب أي آثار سلبية على أداء النظام أو استجابته.

غالبًا ما توفر لغات البرمجة الحديثة وأطر التطوير آليات مدمجة للتعامل مع الحلقات اللانهائية بشكل أكثر كفاءة. على سبيل المثال، أطر واجهة المستخدم الرسومية (GUI). توفير بنيات تعتمد على الأحداث حيث تنتظر البرامج إدخال المستخدم أو أحداث النظام، مما يلغي الحاجة إلى حلقات لا نهائية صريحة.

من الضروري توخي الحذر والتقدير عند الاستخدام حلقات لا نهاية لها . ويجب استخدامها فقط عندما يكون هناك سبب واضح وصالح لحلقة تشغيل غير محددة، ويجب تنفيذ الضمانات الكافية لمنع أي تأثير سلبي على البرنامج أو النظام.

خاتمة:

وفي الختام، أ حلقة لا نهائية في C يشكل بناءًا متكررًا لا ينتهي أبدًا ويستمر في العمل إلى الأبد. مختلف هياكل الحلقة ، مثل ال حلقة for، أو while، أو do-while، أو عبارة goto، أو وحدات ماكرو C ، ويمكن استخدامه لإنتاجه. تستخدم أنظمة التشغيل والخوادم وألعاب الفيديو في كثير من الأحيان حلقات لا نهائية لأنها تتطلب مدخلات ومخرجات بشرية ثابتة حتى الإنهاء اليدوي. ومن ناحية أخرى فإن حلقات لا نهائية غير مقصودة قد يحدث ذلك بسبب عيوب في التعليمات البرمجية، والتي يصعب تحديدها، خاصة بالنسبة للقادمين الجدد.

النظر بعناية في الفواصل المنقوطة والمعايير المنطقية ، و إنهاء الحلقة المتطلبات مطلوبة لمنع الحلقات اللانهائية غير المقصودة. يمكن أن تنتج الحلقات اللانهائية عن وضع فاصلة منقوطة بشكل غير صحيح أو استخدام عوامل التعيين بدلاً من عوامل العلائقية. قد تؤدي أيضًا شروط الحلقة الخاطئة التي يتم تقييمها دائمًا إلى صواب إلى حدوث خطأ حلقة لا نهائية . علاوة على ذلك، منذ كسر الكلمة الأساسية ينتهي فقط بالحلقة الأقرب، لذا يجب توخي الحذر عند استخدامه في الحلقات المتداخلة. علاوة على ذلك، نظرًا لأنها قد تجعل شرط إنهاء الحلقة مستحيلًا الوفاء به، فيجب مراعاة أخطاء الفاصلة العائمة أثناء العمل مع أرقام الفاصلة العائمة.

تعلم السيلينيوم