如何重写控制台项目中的一行文本?C++

How do I rewrite a line of text in a console project? c++

提问人:user3797758 提问时间:2/6/2015 最后编辑:user3797758 更新时间:9/22/2019 访问量:21026

问:

我正在处理一个 c++ 控制台项目,我想显示一个百分比,而不必每次都换行(这样窗口就不会被数千行堵塞)。

有没有办法删除打印的最后一行,或者说下次我输出一行时它应该替换当前行?

C++

评论

0赞 Cameron 2/6/2015
有很多方法可以做到这一点,但其中大多数都取决于您的主机环境(即操作系统)。您的目标操作系统是什么?
1赞 inetknght 2/6/2015
如何擦除 C 中控制台上打印的当前行?我正在Linux系统上工作
0赞 user3797758 2/6/2015
尽管其中有相同的答案,但它是基于 C,而我问的是 C++。在C++中寻找解决方案的人不一定会查看基于C的答案。

答:

17赞 marsh 2/6/2015 #1

可以使用 \r(回车符)将光标返回到行的开头:

这适用于 Windows 和 Linux。

发件人:擦除当前打印的控制台行

您也可以使用一系列退格键。

string str="Hello!";
cout << str;
cout << string(str.length(),'\b');
cout << "Hello again!";

发件人: http://www.cplusplus.com/forum/unices/25744/

也许标记为重复?我真的不知道怎么做。

评论

0赞 inetknght 2/6/2015
标签下的小“标志”链接允许您出于各种原因标记问题,包括可能是重复的
0赞 Steve Fallows 2/6/2015
实际上,重复是关闭的原因,而不是标记的原因。
2赞 coderkevin 2/6/2015 #2

这非常依赖于平台和终端。但是,您可能想先看看 ncurses:http://linux.die.net/man/3/ncurses

对于 Windows:如何在不使用第三方库的情况下覆盖 Windows 本机 C++ 控制台应用中控制台的相同部分?

对于 Linux:https://unix.stackexchange.com/questions/43075/how-to-change-the-contents-of-a-line-on-the-terminal-as-opposed-to-writing-a-new

6赞 LoW 9/22/2019 #3

我测试的一个简单例子是:Linux

std::cout << "Some text to display..." << "\t\r" << std::flush;

在这里,添加了一个表格来处理略有变化的字符串长度,并将光标发送回行的开头(如其他答案中所述)。 需要保证显示该行而不跳转到下一行。\t\rstd::flush