2011-10-26 4 views
0

버퍼를 플러시하기 위해 cout 문의 끝에 endl을 사용하는 것에 대해 어려운 방법을 배웠습니다. 내가 혼란스러워하는 이유는 endl이 때때로 필요한 경우 일 뿐이 기 때문입니다. 보통 할 수 있습니다cout << "텍스트"는 시간의 일부만 표시됩니다.

cout << "test"; 

그리고 테스트가 표시됩니다. 그러나 긴 콘솔 프로그램의 한가운데서 나는 비슷한 cout 문을 가질 것이고 아무 것도 표시되지 않을 것이고 코드는 계속 움직이지 않을 것입니다. endl을 끝에 추가하면 버퍼를 비우고 텍스트를 표시하여 문제를 해결합니다. 그러나 어떤 경우 버퍼가 자동으로 플러시되고 어떤 경우에는 수동으로 플러시됩니까? 문제를 재현하는 방법을 모르기 때문에 샘플 코드를 제공 할 수는 없지만 대부분의 사람들이 이것을 보았다고 가정합니다.

+0

대부분의 라이브러리는 줄 바꿈 문자'\ n'에서 플러시하므로, 끝내려면'endl'이 필요 없습니다. 물론 개행을 원하지 않는다면'flush'를 대신 사용할 수 있습니다. –

답변

2

버퍼가 일정 길이에 도달하거나 프로그램이 정상적으로 종료되면 버퍼가 플러시됩니다.

+0

만약 내가 cout << "test1"; cin >> var; 프로그램은 종료되지 않지만 var가 입력되기를 기다립니다. 그러나 test1 여전히 표시됩니다. 그래서 버퍼가이 "특정 길이"에 도달 했습니까? 그게 뭔지 어떻게 압니까? – gsingh2011

+0

@ gsingh2011 그러면'cin'이 버퍼를 플러시합니다. 결국, 전에 나온 것을 표시하지 않고서는 입력 할 수 없습니다. –

+3

cin이하는 일에 대해 생각해 보면, 화면에 어떤 출력도 먼저 플러시한다는 것이 딱 맞는 의미입니다. – Nathanael

1

버퍼가 자동으로 플러시되는시기와 이유는 작업중인 특정 플랫폼의 구현 자에게 달려 있습니다. 버퍼가 플러시 될시기에 대해 어떠한 가정이나 추측도해서는 안됩니다.

텍스트를 표시하려면 std :: endl을 추가하기 만하면됩니다. ;)

관련 문제