logo

C의 무한 루프

무한 루프란 무엇입니까?

무한 루프는 루프를 종료하지 않고 루프를 영원히 실행하는 루프 구조입니다. 그것은 또한 무기한 루프 또는 끝없는 고리. 연속 출력을 생성하거나 출력을 생성하지 않습니다.

무한 루프를 사용해야 하는 경우

무한 루프는 사용자 입력을 받아들이고 사용자가 수동으로 애플리케이션을 종료할 때까지 계속해서 출력을 생성하는 애플리케이션에 유용합니다. 다음 상황에서는 이 유형의 루프를 사용할 수 있습니다.

Java에서 json에 대한 객체
  • 모든 운영 체제는 일부 작업을 수행한 후에 존재하지 않기 때문에 무한 루프에서 실행됩니다. 사용자가 수동으로 시스템을 종료하는 경우에만 무한 루프가 발생합니다.
  • 서버가 모든 클라이언트 요청에 응답할 때 모든 서버는 무한 루프에서 실행됩니다. 관리자가 수동으로 서버를 종료하는 경우에만 무한 루프에서 나옵니다.
  • 모든 게임도 무한 루프로 실행됩니다. 게임은 사용자가 게임을 종료할 때까지 사용자 요청을 수락합니다.

다양한 루프 구조를 통해 무한 루프를 만들 수 있습니다. 다음은 무한 루프를 정의할 루프 구조입니다.

  • 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' 루프를 무한번 실행합니다. '안녕하세요 javatpoint' 무한히 표시됩니다.

산출

C의 무한 루프

while 루프

이제 while 루프를 사용하여 무한 루프를 만드는 방법을 살펴보겠습니다. 다음은 무한 while 루프에 대한 정의입니다.

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

위의 while 루프에서는 루프 조건 안에 '1'을 넣었습니다. 0이 아닌 정수는 참 조건을 나타내고 '0'은 거짓 조건을 나타냅니다.

간단한 예를 살펴보겠습니다.

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

위의 코드에서는 조건이 포함되어 있지 않으므로 무한히 실행되는 while 루프를 정의했습니다. 'i'의 값은 무한히 업데이트됩니다.

산출

C의 무한 루프

do..while 루프

그만큼 하세요..그동안 loop를 사용하여 무한 루프를 만들 수도 있습니다. 다음은 무한을 생성하는 구문입니다. 하세요..그동안 고리.

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

위의 do..while 루프는 루프 조건 내부에 '1' 값을 제공하므로 무한 조건을 나타냅니다. 0이 아닌 정수가 참 조건을 나타낸다는 것을 이미 알고 있으므로 이 루프는 무한히 실행됩니다.

goto 문

무한 루프를 정의하기 위해 goto 문을 사용할 수도 있습니다.

 infinite_loop; // body statements. goto infinite_loop; 

위 코드에서 goto 문은 제어를 무한 루프로 전환합니다.

매크로

매크로 상수를 사용하여 무한 루프를 만들 수도 있습니다. 예를 통해 이해해 봅시다.

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

위 코드에서는 'infinite'라는 이름의 매크로를 정의했고, 그 값은 'for(;;)'입니다. 프로그램에 '무한'이라는 단어가 나올 때마다 '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)을 넣었으므로 '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>

무한 루프 제대로 되지 않을 경우 문제가 발생할 수 있습니다 통제된 또는 디자인된 , 과잉으로 이어짐 CPU 리소스 소비 프로그램이나 시스템의 무응답. 메커니즘 구현 필요할 때 무한 루프에서 벗어나는 것이 중요합니다.

포함하는 것이 좋습니다 종료 조건 고리 의도하지 않은 무한 루프를 방지합니다. 이러한 조건은 다음을 기반으로 할 수 있습니다. 사용자 입력 , 특정 이벤트 또는 플래그 , 또는 시간 제한 . 루프는 적절한 항목을 통합하여 종료됩니다. 종료 조건 목적을 달성하거나 특정 기준을 충족한 후.

무한 루프를 방지하는 기술:

하지만 무한 루프 가끔 의도할 수도 있지만 자주 발생합니다. 의도하지 않은 프로그램이 발생할 수 있습니다. 얼다 또는 충돌 . 프로그래머는 의도하지 않은 무한 루프를 방지하기 위해 다음 전략을 사용할 수 있습니다.

종료 조건을 추가합니다. 루프에 궁극적으로 평가할 수 있는 조건이 있는지 확인하세요. 거짓 , 그것을 허용 .

카운터를 활용하세요: 반복 횟수에 대한 제한을 설정하고 각 루프 반복마다 증가하는 카운터를 구현합니다. 따라서 필요한 조건이 만족되지 않더라도 루프는 궁극적으로 다음과 같은 결과를 낳게 됩니다. .

시간 초과 시스템을 도입합니다. 제한 시간에 도달한 경우, 고리 중지됩니다. 타이머나 시스템 기능을 사용하여 경과된 시간을 측정합니다.

외부 또는 사용자 제공 트리거를 사용합니다. 특정 사용자 입력이나 외부 이벤트에 대한 응답으로 루프가 끝나도록 디자인합니다.

어떤 경우에는 무한 루프 특정 알고리즘에 의도적으로 사용되거나 시스템 수준 작업 . 예를 들어 실시간 시스템 또는 임베디드 시스템은 무한 루프를 활용하여 입력을 모니터링하거나 특정 작업을 지속적으로 실행합니다. 그러나 그러한 관리에는 주의가 필요합니다. 제대로 루프 , 시스템 성능이나 응답성에 대한 부정적인 영향을 방지합니다.

최신 프로그래밍 언어와 개발 프레임워크는 무한 루프를 보다 효율적으로 처리하기 위한 내장 메커니즘을 제공하는 경우가 많습니다. 예를 들어, 그래픽 사용자 인터페이스(GUI) 프레임워크 프로그램이 사용자 입력이나 시스템 이벤트를 기다리는 이벤트 중심 아키텍처를 제공하여 명시적인 무한 루프가 필요하지 않습니다.

사용시 주의와 재량권을 행사하는 것이 중요합니다. 무한 루프 . 무한한 실행 루프에 대한 명확하고 타당한 이유가 있는 경우에만 사용해야 하며, 프로그램이나 시스템에 부정적인 영향을 미치지 않도록 적절한 보호 조치를 구현해야 합니다.

결론:

결론적으로, 무한 루프 C에서는 결코 끝나지 않고 영원히 계속 실행되는 루프 구조를 구성합니다. 다른 루프 구조 , 와 같은 for 루프, while 루프, do-while 루프, goto 문 또는 C 매크로 , 그것을 생산하는 데 사용할 수 있습니다. 운영 체제, 서버 및 비디오 게임은 수동으로 종료할 때까지 지속적인 인간 입력 및 출력을 요구하기 때문에 모두 무한 루프를 사용하는 경우가 많습니다. 반면, 의도하지 않은 무한 루프 특히 신규 사용자의 경우 식별하기 어려운 코드 결함으로 인해 발생할 수 있습니다.

미국의 주

신중한 고려 세미콜론, 논리적 기준 , 그리고 루프 종료 의도하지 않은 무한 루프를 방지하려면 요구 사항이 필요합니다. 무한 루프는 부적절한 세미콜론 배치 또는 관계 연산자 대신 할당 연산자를 사용하여 발생할 수 있습니다. 항상 true로 평가되는 거짓 루프 조건은 마찬가지로 다음과 같은 결과를 초래할 수 있습니다. 무한 루프 . 게다가, 이후 브레이크 키워드 가장 가까운 루프만 종료하므로 중첩 루프에서 사용할 때는 주의해야 합니다. 또한 루프 종료 조건을 충족할 수 없게 만들 수 있으므로 부동 소수점 숫자로 작업하는 동안 부동 소수점 실수를 고려해야 합니다.