【发布时间】:2014-02-21 11:11:25
【问题描述】:
所以,我有下面的程序。它的作用是打印随机数,同时在控制台上将它们格式化为 10 的宽度。
现在,当我添加 sleep 功能时,我希望它每 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 和 unix 上都试过了,结果完全一样。
【问题讨论】:
-
是的,输出确实被缓冲了。明确地
flush()或<< std::endl;。 -
@hmjd 那么,当收集到 102 个输出后系统决定输出?当我添加
<< endl;时,每个数字都会正确打印,但在新行上。我将如何以相同的方式打印但格式化?(每个数字单独,在同一行) -
std::cout.flush()将避免换行。 -
好的,我在打印后添加
cout.flush();解决了这个问题。完美运行。
标签: c++ terminal console sleep usleep