我想编写一个计时器程序,该程序显示从x秒到0秒的时间,例如,如果x = 10s:10s-9s-8s ... 1s。但是,我想每秒擦除一次:当程序在cout中写入“ 9s”时,我想擦除“ 10s”。您知道如何擦除std :: cout中写的上一行吗?我在linux上,但如果可能的话,我希望代码可移植。
我尝试了std::cout << "\r";
,但是没有用,例如,使用了十秒钟的计时器,程序等待了十秒钟,然后写入“ 1s”。
这是我的代码:
#include <iostream>
#include <thread>
#include <chrono>
std::string convert(unsigned short int seconds);
int main()
{
unsigned short int seconds {};
std::cout << "Entrez le temps en secondes du minuteur : ";
std::cin >> seconds;
std::cout << std::endl;
for (unsigned short int i {seconds}; i != 0; i--)
{
std::string time {convert(i)};
std::cout << '\r' << time ;
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
return 0;
}
std::string convert(unsigned short int seconds)
{
if (seconds < 60)
return std::to_string(seconds) + "s";
else if (seconds >= 60 && seconds < 3600)
return std::to_string(seconds/60) + "min " + std::to_string(seconds%60) + "s";
else
return std::to_string(seconds/3600) + "h " + std::to_string((seconds%3600)/60) + "min " + std::to_string(seconds%60) + "s";
}
谢谢您的帮助。
答案 0 :(得分:2)
您不刷新缓冲区,因此您仅看到最后一行,可以cout
在内部刷新std::cout.flush();
,还请记住,您的代码仅重写该行的开头,因此10s
将更改为9ss
。
这会有所帮助
std::cout << '\r' << time;
std::cout.flush();