用c ++在同一行上打印

时间:2014-02-19 03:41:07

标签: c++

我正在尝试将时间写在同一行而不是堆叠输出。我似乎无法让它工作。

以下是我所拥有的内容:我认为"\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;
}

4 个答案:

答案 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

以下换行符\nstd::flush相当于std::endl

std::cout << printFunction() << '\n' << std::flush;

就像

std::cout << printFunction() << std::endl;

现在删除std::endl将在同一行中打印字符串。

cout << "\r" << string;