【问题标题】:Random print program, prints multiple outputs at once despite sleep() function? [duplicate]随机打印程序,尽管有 sleep() 功能,但一次打印多个输出? [复制]
【发布时间】: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()&lt;&lt; std::endl;
  • @hmjd 那么,当收集到 102 个输出后系统决定输出?当我添加&lt;&lt; endl; 时,每个数字都会正确打印,但在新行上。我将如何以相同的方式打印但格式化?(每个数字单独,在同一行)
  • std::cout.flush() 将避免换行。
  • 好的,我在打印后添加cout.flush();解决了这个问题。完美运行。

标签: c++ terminal console sleep usleep


【解决方案1】:

是的,输出确实被缓冲了。

使用std::cout.flush(); 手动刷新。

请注意,std::endl(添加新行并)进行刷新。

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多