tmdwp0612   1년 전

코드와 같이 썻을때 

왜 출력이 다끝나고 한번에 나오는지 모르겠어요

ㅠㅠ

답변부탁드립니다

bamgoesn   1년 전

그게 정상입니다.

cout은 출력할 문자열을 모아두는 역할을 합니다. '출력 버퍼'라고 부릅니다. cout << 값을 하면 cout에 문자열이 쌓이고 쌓이는데, 그러다가 cout << endl이 이루어지면 cout은 모아뒀던 문자열을 한 번에 내뱉어서 콘솔에 출력합니다.

예외적으로, 일반적인 상황에서는 cin에 입력이 들어오게 된다면 endl이 없어도 입력받기 직전에 cout의 버퍼가 비워집니다. 입력이 들어오기 전에 출력이 이뤄지는 게 자연스럽기 때문입니다.

빠른 입출력에서 출력은 대개 '문자열을 실제로 콘솔에 띄우는 것'이 오래 걸리는 일임에 기반을 두고 있습니다. 빠른 출력은 출력할 문자열을 모아뒀다가 한꺼번에 출력함으로써 출력을 빠르게 해줍니다. 따라서 빠른 입출력 코드를 사용하셨으므로 출력은 모든 입력이 종료되고 나서 이루어지는 게 정상입니다.

그런데 코드에선 cin으로 입력을 받아도 출력이 바로 이뤄지지 않고 있죠? 이는 main함수 시작에서 cin.tie(NULL);이 있기 때문입니다. 이 줄은 cin과 cout이 묶여있는 것을 풀어줌으로써, cin이 입력을 받을 상황이 되더라도 cout이 버퍼를 비우지 않도록 (= 콘솔로 출력하지 않도록) 해줍니다.

다음 블로그 글을 참고하시면 더 도움이 될 겁니다. https://jaimemin.tistory.com/1... 구글 검색에서 두 번째인가에 나오는 글입니다.

댓글을 작성하려면 로그인해야 합니다.