2013-10-09 1 views
6

아래 프로그램을 실행할 때 출력이 나타나지 않습니다.무한 while 루프를 사용하여 printf와 비정상적인 동작이 발생했습니다.

#include <stdio.h> 

int main() 
{ 
    printf("hello"); 
    while(1) 
    { 

    } 
    return 0; 
} 

내가 printf와 명령은 문자열의 마지막에 '\ n을'문자를 추가 편집하는 경우 반면에, 다음 예상되는 출력이 제공됩니다. 첫 번째 코드에서 무슨 일이 벌어지고 있습니까? 나는 그것을 이해할 수 없다.

+0

'fflush (stdout)'을 호출하면 무한 루프가됩니다. –

+3

출력이 버퍼링됩니다. @GrijeshChauhan이 제안한대로'printf' 다음에'fflush (stdout)'을 사용하면 문자열의 끝 부분에'\ n'을 출력 할 수 있습니다. 입력 함수 ('getchar' 또는'scanf')와 같이 출력 버퍼를 플러시하는 다른 연산이 있지만 코드 조각에서 루프가 수행하는 작업이 명확하지 않습니다. – lurker

+0

[프로그램이 최종 printf 문을 실행하지 않는 이유는 무엇입니까?] (http://stackoverflow.com/questions/11277796/why-does-program-not-execute-final-printfstatement) – lurker

답변

10

시도 .

fflush(stdout);을 호출하여 강제로 버퍼를 터미널로 플러시 할 수 있습니다. 그건 그렇고 stdin을 플러시하려고하지 마십시오. 허용되지 않습니다.

+0

하지만 왜 코드가 무한 루프없이 위의 printf와 함께 작동합니까? – DesirePRG

+0

+1을 stdin과 함께하지 말 것을 권유합니다. – fayyazkl

+3

프로그램이 곧 종료되면 플러시 요청과 프로그램이 계속되지 않고 os가 출력 버퍼를 더 빨리 플러시합니다. – fayyazkl

2

표준 출력은 출력의 전체 라인이 수집 될 때까지 디바이스 (단말)에 기록되지 않는다 즉 라인, 버퍼링 때문이다

printf("hello\n"); 

또는

printf("hello"); 
fflush(stdout) 
+0

'ffush (stdout)'는'printf' 바로 다음에 발생합니다. – lurker

+0

@mbratch True. 고마워. 고마워. –

0

출력 끝 부분에 줄 바꿈을 인쇄해야합니다. 그렇지 않으면 정의되지 않은 동작을 호출합니다 (적어도 잠재적으로 정의되지는 않음).

+1

"잠재적으로 정의되지 않은 동작 호출"이란 무엇을 의미합니까? –

0

추가 정보를 위해 사용 printf("hello\n");

것은 this question에 대한 답변을 참조하십시오.

관련 문제