C++如何在控制台上改变输出

16

如何在控制台中显示变化的数字?我有一个普通的C++命令行程序,使用cout,但我想显示一个代表进度的百分数数字,计数器会从0一直增加到100不打印新行。该怎么做?(如果重要的话:我使用的是Windows 7)


你的意思是打印并删除数字? - rda3mon
1
@Ringo:是的。您还可以将其扩展到一般问题:如何更改先前已打印到控制台的任何内容?我还看到并发现有趣的是:更改输出文本的颜色。 - Felix Dombek
@Nawaz:commandline 标签是用来做什么的? - Felix Dombek
命令行是你输入命令的地方,而不是输出结果的地方。 - Nawaz
3个回答

33

当我需要时,我只需输出一个回车符,在C++中为\r

记得每次刷新输出,例如:

cout << "\r" << x << "% completed.       " << flush;

为了解决类似于 Microsoft 风格的浮动进度条,结尾处有空格以清除上一行输出。

在此输入图片描述


12

使用退格字符。

cout << "10%";
// ...
cout << "\b\b\b20%";

6

通常我会在进度信息后面加上回车符。这样,任何其他输出都会正常显示(只要该行有足够的字符来完全覆盖进度信息)。

    cerr<<percentage<<"% \r";

顺便说一下,我更喜欢使用cerr而不是cout来输出这种状态/诊断信息,因为cout可以保留给实际内容。这样你就可以将正常程序输出重定向到文件中,仍然可以在控制台上查看进度。此外,使用cerr时,您不必使用“flush”。


但是你不太可能通过标准输入/输出将文件传递给哈夫曼压缩,对吧? - Felix Dombek
2
@Felix:当然可以!但也许不适用于Windows。据我所知,你必须使用非标准调用来告诉微软的C++流库不要修改数据流中可能偶然出现的"\r\n"序列。在Linux上,这种使用stdin/stout的方式非常强大且非常常见。 - Brent Bradburn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接