문제

다시, 선생님은 내 질문에 대답 할 수 없었습니다. 누가 할 수 있는지 알았습니다 ...

그래서, 나는 C. C ++에서 C.를 배운 적이 없다. 최근 과제에서 선생님은 우리에게

setbuf( stdout , NULL );

Main () 상단에서 부패하지 않은 출력을 얻으려면 출력을 올바르게 볼 수 있습니다.

내 질문은 이것입니다 :이 진술은 cout 문에 영향을 미칩니 까?

미리 감사드립니다!

도움이 되었습니까?

해결책

기본적으로 ioStreams 및 stdio는 동기화됩니다. 참조.

그렇다고 STDIO 버퍼링을 수동으로 조정하는 것이 좋습니다. 당신은 활용하고 싶을 수도 있습니다 std::endl 또는 std::flush (에서 <ostream>), 도움이 될 수 있습니다. 예,

std::cout << "Hello, world!" << std::endl;

또는

std::cout << "Hello, world!\n" << std::flush;

이 두 가지 모두 같은 일을합니다. (std::endl = endline 인쇄, 플러시.)

다른 팁

기본적으로 STDOUT 또는 COUT가 콘솔에 인쇄하는 경우 출력은 라인 버퍼링됩니다. 이는 인쇄 된 모든 Newline이 출력을 플러시 할 것임을 의미합니다. 예를 들어, 출력을 파일로 리디렉션하고 Tail -F를 사용하고 실시간에 특정 출력이 필요합니다.

Chris가 말했듯이 sync_with_stdio 부패하지 않은 stdout을 부패하지 않은 cout (기본적으로)와 묶어야하지만 stdout에서 setbuf를 사용하는 대신 Cout을 사용하는 것이 더 나은 옵션은 사용하는 것입니다. pubsetbuf 포인터에서 rdbuf. 즉:

// make cout unbuffered
std::cout.rdbuf()->pubsetbuf(0, 0);

흥미로울 수있는 또 다른 기능은 묶다.

일반적으로 출력을 즉시 보는 것이 중요 할 때, 우리는 실제로 거래를하기 전에 하드 드라이브에 거래를 기록 해야하는 복잡한 신뢰할 수있는 재무 루틴에 대해 이야기하고 있습니다. 또는 (훨씬 더 일반적인 경우) 프로그램이 충돌하는 경우에도 디버그 메시지를보고 싶습니다.

당신이 공부하고 있기 때문에, 나는 당신이 두 번째 사건을 다루고 있다고 가정 할 것입니다. 이 경우 저의 조언은 stdout 대신 stderr를 사용하는 것입니다. 기본적으로 부패하지 않으며 STDOUT와 별도로 리디렉션하여 출력을 한 곳에 놓고 다른 곳에 로깅 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top