如何在C++中从 std::cout 中删除一行

How to remove a line from std::cout in C++?

本文关键字:删除 一行 cout C++ 中从 std      更新时间:2023-10-16

我想编写一个计时器程序,该程序显示从x秒到0秒的时间,例如,如果x=10s:10s - 9s - 8s ...1秒。然而,我想每秒擦除前一次:当程序在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";       
}

谢谢你的帮助。

您不刷新缓冲区,因此您只看到最后一行,cout可以使用手动刷新std::cout.flush();您还应该记住,您的代码仅重写该行的开头,因此10s将更改为9ss

这将有所帮助

 std::cout << 'r' << time;
 std::cout.flush();