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

Gal*_*axy 2 c++ sleep runtime-error

同事!我试着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;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*som 5

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

cout << i << " " << std::flush;
Run Code Online (Sandbox Code Playgroud)