繁体   English   中英

用c ++在同一行上打印

[英]Printing on same line in 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;
}
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;

endl插入换行符并刷新流。

cout << "\r" << string ; //works

尝试这个:

cout << "\r" << string;

endl插入换行符并刷新流。

我想先提供一些有用的信息。

您正在插入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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM