2012-08-27 4 views
2

가능한 중복 :
Why does printf not flush after the call unless a newline is in the format string? (in C)"의 printf"문자열을 인쇄하지 않습니다 immediatly

나는했습니다과 같은 코드 :

printf("Starting nets allocation..."); 
while(...) 
{ 
    ...some operations... 
} 
puts("DONE"); 

코드는해야 인쇄 immediatly 문자열 "Starting nets allocation ..."을 입력 한 다음 루프가 끝나면 "DONE"이 인쇄됩니다.

대신 프로그램이 먼저 루프를 수행 한 다음 "Starting net sets ... DONE"문자열을 인쇄합니다. 왜 이런 일이 발생합니까? 이 문제를 어떻게 해결할 수 있습니까? fflush를 사용하여 - - 당신이 즉시 출력을 원하는 경우는 출력 스트림을 플러시해야합니다 있도록

+0

[질문 및 대답 방법] (http://stackoverflow.com/faq#howtoask). – bitmask

답변

8

출력 스트림 stdout는 기본적으로 버퍼링 줄 바꿈 또는 원인 printf에 인쇄 될 :

printf("Starting nets allocation..."); 
fflush(stdout);  

또는 :

: 당신은 또한 STDIO.H에서 setbuf 기능을 사용하여 파일 포인터 수준에서 버퍼링을 제어 할 수 있습니다

printf("Starting nets allocation...\n"); 

setbuf(stdout, NULL); 

setbuf의 두 번째 인수는 호출자가 스트림에 출력 버퍼링에 사용하기 위해 제공 한 버퍼입니다. NULL을 건네 주면 (자), 버퍼링을 무효로하는 것을 나타내고, 다음과 등가가됩니다.

setvbuf(stdout, NULL, _IONBF, 0); 

지정의 스트림의 버퍼링도 무효로합니다.

setbuf 에 대한 문서를 참조하십시오.

+0

fflush()가 내가 찾고 있던 것입니다! 감사합니다. –

3

stdout에 출력 버퍼링되므로, 내용을 플러시 printf 호출 후

fflush(stdout); 

추가. 일반적으로 줄 바꿈 문자를 추가하면 버퍼가 플러시되지만 사용자의 경우에는 바람직하지 않을 수 있습니다.

관련 문제