2012-10-31 8 views
2

가능한 중복 : 나는이 포럼에 대한 몇 가지 질문에 대답하려고했다
Why does printf not flush after the call unless a newline is in the format string?C에서 수면() 동작 ..?

, 나는 꽤 흥미로운 일이 발생했습니다. 이 완벽하게 작동

int main() 
{ 
int print_val = -1; 

while(1) 
{ 
    printf("%d \n", ++print_val); 
    sleep(1); 
} 
} 

: 다음은 코드입니다. 이제 재미가 입력됩니다. 단지 라인 번호 7을 printf("%d ", ++print_val); (그냥 줄 바꿈을 제거하십시오!)

로 변경하면 출력이 없습니다 ..!

그래서 아무도 나를 sleep() 함수의 동작을 이해하는 데 도움주세요 ..? 나는 fprintf()와 putc()로 바꾸려고 시도했기 때문에 sleep()이 아닌 printf()가 필요하다고 생각한다.

저는이 코드를 32 비트 우분투뿐만 아니라 32 비트 우분투 가상 머신에서 시도했습니다.

+3

fflush (stdout)을 입력 해보십시오. printf 직후. – imreal

+0

이것은 여러 번 대답되었습니다. \ n 버퍼를 플러시합니다. Printf는 기본적으로 버퍼 출력이며 실제 인쇄 시점을 예측할 수 없습니다. – fayyazkl

+0

감사합니다. Nick, Rob Mayoff !! 'fflush'ing 생각하지 않았다. @robmayoff 이전 질문에 대한 귀하의 링크는 매우 유익했습니다. 감사. – Adorn

답변

5

을 장식

덕분에 나는 문제가 출력 버퍼를 플러시 함께 생각합니다. 문자열 끝에 '\ n'을 쓰지 않으면 출력 버퍼가 플러시되지 않고 printf가 아무 것도 인쇄하지 않습니다. 출력 버퍼가 가득 차면 인쇄를 시작합니다. this 질문과 this 질문을보십시오.