logo

C の無限ループ

無限ループとは何ですか?

無限ループは、ループを終了せずにループを永久に実行するループ構造です。とも呼ばれます 不定 ループまたは 無限の ループ。連続出力を生成するか、出力を生成しません。

無限ループを使用する場合

無限ループは、ユーザー入力を受け入れ、ユーザーがアプリケーションを手動で終了するまで継続的に出力を生成するアプリケーションに役立ちます。次の状況では、このタイプのループを使用できます。

複数のテーブルから SQL を選択する
  • すべてのオペレーティング システムは、何らかのタスクを実行した後は存在しないため、無限ループで実行されます。無限ループから抜け出すのは、ユーザーが手動でシステムをシャットダウンした場合のみです。
  • サーバーはすべてのクライアント要求に応答するため、すべてのサーバーが無限ループで実行されます。管理者がサーバーを手動でシャットダウンした場合にのみ、無限ループから抜け出すことができます。
  • すべてのゲームも無限ループで実行されます。ゲームは、ユーザーがゲームを終了するまでユーザーのリクエストを受け入れます。

さまざまなループ構造を通じて無限ループを作成できます。以下は、無限ループを定義するループ構造です。

  • for ループ
  • while ループ
  • do-while ループ
  • ステートメントに移動
  • Cマクロ

forループ

見てみましょう 無限の「のために」 ループ。の定義は次のとおりです。 無限 for ループ:

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

私たちが知っているように、 「for」ループ はオプションであり、上記の for ループでは条件について何も言及していません。したがって、このループは無限回実行されます。

例を通して理解しましょう。

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

上記のコードでは、「for」ループを無限回実行します。 「こんにちは、ジャヴァトポイント」 無限に表示されます。

出力

C の無限ループ

while ループ

次に、while ループを使用して無限ループを作成する方法を見てみましょう。以下は、無限 while ループの定義です。

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

上記の while ループでは、ループ条件の中に「1」を入れています。ご存知のとおり、ゼロ以外の整数は真の状態を表し、「0」は偽の状態を表します。

簡単な例を見てみましょう。

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

上記のコードでは、条件が含まれていないため無限回実行される while ループを定義しました。 「i」の値は無限に更新されます。

出力

C の無限ループ

do..while ループ

一方を行います ループを使用して無限ループを作成することもできます。以下は、無限を作成する構文です。 一方を行います ループ。

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

上記の do..while ループは、ループ条件内に「1」値を指定するため、無限条件を表します。ゼロ以外の整数が真の状態を表すことはすでにわかっているため、このループは無限回実行されます。

goto ステートメント

goto ステートメントを使用して無限ループを定義することもできます。

 infinite_loop; // body statements. goto infinite_loop; 

上記のコードでは、goto ステートメントによって制御が無限ループに移ります。

マクロ

マクロ定数を使用して無限ループを作成することもできます。例を通して理解しましょう。

if else ステートメント Java
 #include #define infinite for(;;) int main() { infinite { printf('hello'); } return 0; } 

上記のコードでは、「infinite」という名前のマクロを定義しており、その値は「for(;;)」です。プログラム内に「infinite」という単語が現れると、それは「for(;;)」に置き換えられます。

出力

C の無限ループ

これまで、無限ループを定義するさまざまな方法を見てきました。ただし、無限ループから抜け出すには何らかのアプローチが必要です。無限ループから抜け出すには、break ステートメントを使用します。

例を通して理解しましょう。

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

上記のコードでは、キー「n」を押すまで無限に実行される while ループを定義しました。 while ループ内に「if」ステートメントを追加しました。 「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; } 

上記のコードは、「for ループ」を無限回実行します。条件 (i>=1) を指定すると、これはすべての条件に対して常に true になります。これは、「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) が false になることはありません。この問題の解決策は、条件を (k<=4.0).< p>

無限ループ 適切に行われないと問題が発生する可能性があります 制御された または 設計 、過剰につながる CPUリソースの消費量 プログラムまたはシステムの応答不能。 実装メカニズム 必要に応じて、無限ループから抜け出すことが重要です。

含めることをお勧めします 終了条件 以内 ループ 意図しない無限ループを防ぐため。これらの条件は以下に基づいて考えることができます ユーザー入力 特定のイベントまたはフラグ 、 または 時間制限 。ループは適切な組み込みによって終了します。 終了条件 目的を達成した後、または特定の基準を満たした後。

無限ループを防ぐテクニック:

それでも 無限ループ 意図的に行われることもありますが、頻繁に行われます。 意図しない プログラムを引き起こす可能性があります フリーズする または クラッシュする 。プログラマは、次の戦略を使用して、不用意な無限ループを回避できます。

終了条件を追加します。 ループに最終的に評価できる条件があることを確認してください。 間違い 、それを許可します 終わり

カウンターを使用する: 反復回数に上限を設け、ループの反復ごとに増加するカウンターを実装します。したがって、必要な条件が満たされない場合でも、最終的にループは終了します。 終わり

タイムアウト システムを導入します。 制限時間に達すると、 ループ 止められます。タイマーまたはシステム関数を使用して、経過時間を測定します。

外部トリガーまたはユーザー提供のトリガーを使用します。 特定のユーザー入力または外部イベントに応答してループが終了するように設計します。

場合によっては、 無限ループ 特殊なアルゴリズムで意図的に使用される場合や、 システムレベルの操作 。たとえば、リアルタイム システムや組み込みシステムは無限ループを利用して入力を監視したり、特定のタスクを継続的に実行したりします。ただし、そのような管理には注意が必要です 適切にループします 、システムのパフォーマンスや応答性への悪影響を回避します。

私のモニター画面の大きさはどれくらいですか

最新のプログラミング言語と開発フレームワークは、多くの場合、無限ループをより効率的に処理するための組み込みメカニズムを提供します。例えば、 グラフィカル ユーザー インターフェイス (GUI) フレームワーク プログラムがユーザー入力またはシステム イベントを待機するイベント駆動型アーキテクチャを提供し、明示的な無限ループの必要性を排除します。

使用時には注意と慎重さが不可欠​​です 無限ループ 。これらは、無期限の実行ループに明確かつ正当な理由がある場合にのみ使用する必要があり、プログラムまたはシステムへの悪影響を防ぐために適切な保護手段を実装する必要があります。

結論:

結論として、 無限ループ C では、決して終了せず、永遠に実行し続けるループ構造を構成します。違う ループ構造 、など for ループ、while ループ、do-while ループ、goto ステートメント、または C マクロ 、を使用して生産できます。オペレーティング システム、サーバー、ビデオ ゲームはすべて、手動で終了するまで人間による継続的な入力と出力を必要とするため、無限ループを頻繁に使用します。一方、 意図しない無限ループ コードの欠陥が原因で発生する可能性があり、特に初心者にとっては特定が困難です。

慎重な検討 セミコロン、論理基準 、 そして ループの終了 不用意な無限ループを防ぐためには要件が必要です。無限ループは、セミコロンの配置が不適切な場合や、関係演算子の代わりに代入演算子を使用した場合に発生する可能性があります。常に true と評価される false ループ条件も同様に、 無限ループ 。さらに、 ブレークキーワード 最も近いループのみを終了するため、ネストされたループで使用する場合は注意が必要です。さらに、ループ終了条件を満たすことが不可能になる可能性があるため、浮動小数点数を扱うときは浮動小数点の間違いを考慮する必要があります。