【问题标题】:C++ sleep() function works not as expectedC++ sleep() 函数不像预期的那样工作
【发布时间】:2026-01-17 07:50:01
【问题描述】:

同事们!我尝试在我的代码中使用sleep() 函数和system() 函数。该代码应该显示第一条消息,然后倒计时,每次打印出剩余的秒数并等待1秒。然后应该清除屏幕。我只想制作一个简单的文字动画。但是程序没有按预期工作!我检查了我的代码,看起来我没有语法或逻辑错误。当我编译并运行这段代码时,它首先等待五秒钟,然后甚至不等待就将消息打印到标准输出,并立即清除屏幕。我认为这是一个运行时错误,尽管它不应该在逻辑上发生。如果以下信息相关,我将从 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;
}

【问题讨论】:

    标签: c++ runtime-error sleep


    【解决方案1】:

    输出通常是缓冲的,直到缓冲区满或文件关闭时才会输出。你需要flush输出。

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

    【讨论】:

      【解决方案2】:

      cout 被缓冲,因此它会保存您正在打印的中间内容,并在刷新时一次性打印所有内容。

      您可以将&lt;&lt; std::endl; 添加到打印i 的行中,或者手动刷新缓冲区。

      【讨论】: