【发布时间】:2019-07-16 14:04:39
【问题描述】:
我想编写一个计时器程序,它显示从 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";
}
感谢您的帮助。
【问题讨论】: