C ++ sleep()函数的工作方式与预期不符

时间:2017-02-11 04:56:33

标签: c++ runtime-error sleep

同事!我尝试在代码中使用sleep()函数和system()函数。代码应该显示第一条消息,然后倒计时,每次打印剩余的秒数并等待1秒。然后应该清除屏幕。我想制作一个简单的文本动画。但该程序没有按预期工作!我检查了我的代码,看起来我没有语法或逻辑错误。当我编译并运行此代码时,首先它会等待五秒钟,然后在没有等待的情况下将消息打印到stdout,并立即清除屏幕。我认为这是一个运行时错误,虽然它不应该在逻辑上发生。如果以下信息是相关的,我从Linux终端编译并运行我的C ++程序。

#include <iostream>
#include <cstdlib>   // includes system();
#include <unistd.h>  // includes sleep();
using std::cout;
using std::cin;
using std::endl;

int main() {
  cout << "Clearing the screen in: ";
  for (int i = 5; i > 0; i--) {
    cout << i << " ";
    sleep(1);  // takes seconds
  }
  system("clear");

  return 0;
}

2 个答案:

答案 0 :(得分:5)

输出通常是缓冲的,在缓冲区已满或文件关闭之前不会出现。您需要flush输出。

cout << i << " " << std::flush;

答案 1 :(得分:3)

cout已缓冲,因此可以保存正在打印的内容,并在刷新时立即打印所有内容。

您可以将<< std::endl;添加到打印i的行或以其他方式手动刷新缓冲区。