我正在尝试将时间写在同一行而不是堆叠输出。我似乎无法让它工作。
以下是我所拥有的内容:我认为"\r"
会在同一行重新打印,但这不起作用。我也试过了printf("\r");
,但也没有用。
任何人都可以帮我弄清楚如何让它发挥作用吗?
void countdown(int time)
{
int h = (time / 3600);
int m = (time / 60) - (h * 60);
int s = time % 60;
std::stringstream ss;
ss << h << ":" << m << ":" << s;
std::string string = ss.str();
cout << "\r" << string << endl;
}
答案 0 :(得分:11)
cout << "\r" << string << endl;
endl
将光标移动到下一行。尝试将其替换为std::flush
,这样可以确保向终端发送输出。 (您还应该#include <iomanip>
并使用std::setw(2)
/ std::setfill('0')
来确保您显示的文字是恒定宽度,否则请说时间从:
23:59:59
到
0:0:0
当前没有覆盖或清除前一段时间的尾随“:59”(如果你的终端有一个空格或者发送一个明确的行尾字符序列,你可以写一些空格或者发送 - 宽度更有意义)。
最终:
std::cout << '\r'
<< std::setw(2) << std::setfill('0') << h << ':'
<< std::setw(2) << m << ':'
<< std::setw(2) << s << std::flush;
答案 1 :(得分:3)
endl
插入换行符并刷新流。
cout << "\r" << string ; //works
答案 2 :(得分:3)
试试这个:
cout << "\r" << string;
endl
插入换行符并刷新流。
答案 3 :(得分:0)
我想首先提供一些有用的信息。
您正在插入std::endl
,在下一行打印下一个字符串。
std::endl
是换行符\n
,后跟std::flush
以下换行符\n
和std::flush
相当于std::endl
。
std::cout << printFunction() << '\n' << std::flush;
就像
std::cout << printFunction() << std::endl;
现在删除std::endl
将在同一行中打印字符串。
cout << "\r" << string;