同事!我尝试在代码中使用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;
}
答案 0 :(得分:5)
输出通常是缓冲的,在缓冲区已满或文件关闭之前不会出现。您需要flush
输出。
cout << i << " " << std::flush;
答案 1 :(得分:3)
cout
已缓冲,因此可以保存正在打印的内容,并在刷新时立即打印所有内容。
您可以将<< std::endl;
添加到打印i
的行或以其他方式手动刷新缓冲区。