printf함수 질문합니다

alsrud의 이미지

갑자기 궁금해서 질문 올립니다.
printf포맷의 경우

char *input;
printf(“\n%s...”, input);
보다는

char *input;
printf(“.....%s\n”, input); 많이 쓰는 것으로 알고 있습니다.

앞쪽에 \n을 피하는 특별한 이유가 있나요?

익명 사용자의 이미지

특별한 이유는 없습니다.

jick의 이미지

stdout의 경우 특별히 redirection을 하지 않는 한 보통 line buffering을 합니다. 다시 말하자면 지나치게 잦은 입출력으로 성능이 떨어지는 것을 막기 위해 \n이 나타날 때까지 기다렸다가 그 줄을 한꺼번에 찍게 됩니다.

따라서 "....\n"으로 쓰면 그 줄이 바로 화면에 나타나는 게 보장이 되지만 "\n...."으로 쓰면 다음 번에 다시 \n을 포함한 문자열을 찍을 때까지 화면에 무한정 안 나타날 수 있습니다.

* 한 줄을 다 완성하지 않아도 화면에 찍고 싶으면 fflush를 쓰시면 됩니다.

HDNua의 이미지

모르던 사실이네요. 배워갑니다.

저는 이렇게 생각했습니다.

Prentice의 이미지

출력 직후 프로그램이 종료되었을 때 command prompt가 출력 내용이랑 같은 줄에 나오면 이상하다는 이유도 있습니다.