2014-02-21 2 views
2

그래서, 아래 프로그램이 있습니다. 그것이하는 일은, 난수를 인쇄하면서 콘솔에서 너비를 10으로 지정하는 것입니다.무작위 인쇄 프로그램, 절전() 기능에도 불구하고 한 번에 여러 출력을 인쇄합니까?

잠자기 기능을 추가 할 때마다 10 밀리 초 (또는 그 이상)마다 하나의 숫자를 인쇄 할 것을 기대했지만, 실제로는 100 * 10 밀리 초마다 100 개의 출력을 인쇄합니다. 궁금 해서요. 왜 이런 일이 일어 났습니까? 출력이 버퍼링되거나 무엇이 발생합니까?

#include <unistd.h> 
#include <iostream> 
#include <cstdlib> 
#include <time.h> 
#include <iomanip> 

int main() 
{ 
    srand(time(0)); 
    for (int i = 1; i < 1000000; i++) 
    { 
     usleep(10*1000); // No matter the input, the same thing happens 
     cout << setw(10) << rand()%(90*i) + 10*i; 
    } 
} 

나는 Windows와 유닉스 모두에서 이것을 시도했지만 정확히 똑같은 것이다.

+2

예, 출력이 버퍼링됩니다. 명시 적으로'flush()'또는'<< std :: endl; '. – hmjd

+0

@hmjd 따라서 102 개의 출력을 수집 한 후에 시스템이 출력을 결정합니까? '<< endl; '을 붙이면 모든 숫자가 올바르게 인쇄되지만 새로운 줄에 인쇄됩니다. 어떻게 같은 방식으로 출력하지만 형식이 맞습니까? (같은 줄에있는 모든 숫자) – ShadoWalkeR

+0

'std :: cout.flush()'는 줄 바꿈을 피할 것입니다. – hmjd

답변

0

예, 출력이 버퍼됩니다.

수동으로 플러시하려면 std::cout.flush();을 사용하십시오.

참고로 std::endl (줄 바꿈을 추가하고) 플러시를 수행합니다.