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와 유닉스 모두에서 이것을 시도했지만 정확히 똑같은 것이다.
예, 출력이 버퍼링됩니다. 명시 적으로'flush()'또는'<< std :: endl; '. – hmjd
@hmjd 따라서 102 개의 출력을 수집 한 후에 시스템이 출력을 결정합니까? '<< endl; '을 붙이면 모든 숫자가 올바르게 인쇄되지만 새로운 줄에 인쇄됩니다. 어떻게 같은 방식으로 출력하지만 형식이 맞습니까? (같은 줄에있는 모든 숫자) – ShadoWalkeR
'std :: cout.flush()'는 줄 바꿈을 피할 것입니다. – hmjd