1

我正在尝试在 C++ 中实现一个“计时器”功能,以便程序在几秒钟后执行某些操作。然而,我得到了意想不到的结果。

short e, sum;
clock_t start;
double duration=0;

for (e=0; e<4; e++) {
    start = clock();
    while (duration < 1) {

        duration = (clock() - start)/(double)CLOCKS_PER_SEC;
    }
    cout << duration;
    duration = 0;
    sum += e;
    /* Calculate EPOCH error */
    cout << e;
}
cout << "\n" << e<< "\n";

我期望的结果是:

  • 每秒控制台输出,后跟 e (0,1,2,3)
  • 在执行结束时,我希望总和为 0+1+2+3 = 6,

获得的结果:

  • 控制台输出后跟 e,在执行完成时全部放在一起
  • 总和 = 6

我发现不确定的是,为什么程序会在执行完成之前打印到控制台,而不是像预期的那样每秒打印一次?

干杯,

4

1 回答 1

1

您的问题是循环期间未刷新输出流。实际上将文本写入控制台有点昂贵。因此,输入被缓冲,并且仅在刷新发生时才写入控制台。刷新流可以通过流来完成std::flush

    cout << e<<std::flush;

std::endl除了添加换行符之外,还将刷新流(写入\n 可以这样做,但这不能保证)。

作为旁注:您可能需要考虑在数字之间添加某种分隔符以使输出可读。

于 2012-12-11T22:05:15.580 回答