2011-02-26 2 views
9

이 코드를 컴파일하고 실행할 때 (훨씬 더 큰 프로그램의 일부 임) 리눅스는 while 루프의 중간에 오면 작동을 멈 춥니 다.C가 while 루프의 중간에 걸리는 이유는 무엇입니까?

아래 코드는 time: 0을 인쇄 한 다음 프로세스가 일시 중단 될 때까지 아무 작업도하지 않고 중단됩니다. 왜 지구상에 time: 0을 인쇄 하나 다음과 같은 온 전성 검사 라인은 아닌가?

while (i < 5) 
{ 
    printf("time: %d\n",elapsedTime); 
    printf("sanity check"); 
    foo(); 
    i++; 
} 

답변

22

출력은 일반적으로 버퍼링되며 플러시 또는 개행 후에 만 ​​작성됩니다. In

printf("sanity check"); 

개행 문자가 없으므로이 다음 무한 루프에서 실행하면 아무 것도 볼 수 없습니다.

printf("sanity check\n"); 

또는

printf("sanity check"); 
fflush(stdout); 

로 교체 당신은 그것을 볼 수 있습니다.

+0

좋습니다. 나는 그 기능에 대해 걱정하고 있었지만, 나는 그것에 도달하지 못하고 있다고 생각했다. 이제는 * * *임을 알게되었으므로 디버깅을 계속할 수 있습니다. 감사!. 나는 10 분 안에 대답을 수락 할 것이다. 내가 할 수있을 때. –

+1

@Raven : 디버거를 사용하여 디버깅을했는데 (단서가 이름에 포함되어 있음), 그게 뭔지 알았을 것입니다. 그리고 아마도 궁극적으로 실패했을 것입니다 (틀림없이 의심의 여지가 없습니다). – Clifford

+0

@ Clifford - 예. 나는 Visual Studio와 C# 개발에 버릇이있다. 불행히도, 나는 VS를 일반 C 환경을 처리 할 수 ​​없으므로 JEdit만으로 막혀있다. –