如何在C++中从 std::cout 中删除一行
How to remove a line from std::cout in C++?
我想编写一个计时器程序,该程序显示从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();
相关文章:
- C++ 如何从控制台中删除一行?
- 选择的行为更改() 删除第一行
- 如何在C++中从 std::cout 中删除一行
- 如何正确删除一行控件并在该位置动态创建一个新控件
- 我想从矩阵中删除一行
- 使用QT,如何在不读取整个文件的情况下删除文本文件中的第一行
- 用“ strcpy”在2D数组中删除(字符)的一行(字符)时是否存在任何错误
- 删除C++中文件最后一行的最佳方法
- 无法删除 txt 文件中 getline(cin , (变量)) 之后的下一行
- 如何在删除一行后重新索引或修复rowid sqlite
- C++ 函数删除一行
- 用C++从文件中删除一行
- 从文件中删除第一行
- Qt 从文件中删除一行
- 在 qt 中删除文件中的一行
- 如何从文本文件中删除一行数据
- 按文本搜索一行并在文本文件中删除它(从C#到C++/CLI)
- 删除一行后将留下空行
- 文件IO -删除一行包含特定字符串的文本
- 如何在c++中删除一行