*忽略* C++和C#如何在命令行中显示百分比[重复]

Posted

技术标签:

【中文标题】*忽略* C++和C#如何在命令行中显示百分比[重复]【英文标题】:*ignore* C++ and C# How to display percentage in a command line [duplicate] 【发布时间】:2013-10-09 14:23:58 【问题描述】:

当我制作一个在命令行中显示进度的程序时, 当进度增长时,如何制作增加(或减少)的 1 行?

这样你就不会明白了:

Progress: 1%
Progress: 2%
Progress: 3%
Progress: 4%
Progress: 5%
Progress: 6%

但是这个:

Progress: PROGRESS%

所以整个操作只有 1 行

有人可以向我解释这是如何工作的吗?

【问题讨论】:

哪种语言? c++ 还是 c#? 不确定这两种语言是否有标准兼容的跨平台方式。如果你使用 '\r' 而后面没有 '\n' 会发生什么? 你可以对 *nix 系统使用 curses,对于我不知道的 windows。 @luiscubal 这适用于 *nix,不知道在 Windows 上。 【参考方案1】:

一种常见的方法是编写不以换行符 (\n) 字符结尾的行,而是以回车符 (\r) 结尾的行,这样它们就可以被覆盖。为了与大多数平台兼容,这样做后必须手动刷新标准输出,以免显示行不显示。

【讨论】:

如果您说 5 行格式化文本并想全部覆盖,这会起作用吗? 恐怕不行,因为你不能用这种方法回退一行:你只能去当前行的开头。对于那个,请参阅 Duncan Smith 的回答。 谢谢,我会尽快尝试这个答案!蒂姆【参考方案2】:

在 C# 中使用 Console.SetWindowPosition

在 C++(我想是 Windows)中使用 SetConsoleCursorPosition。

(对于非 Windows C++,请使用 ncurses 库)。

【讨论】:

【参考方案3】:

你试试关注

 Console.Write("\rProgress-0%   ", progvalue);

【讨论】:

【参考方案4】:

您想清除控制台。在 C# 中,您可以使用 Console.Clear

http://msdn.microsoft.com/en-us/library/system.console.clear.aspx

在 C++ 中,我认为您会执行以下操作:

system("cls");

您应该有一个函数,在每次清除后使用更新的值将所有文本重写到控制台。

【讨论】:

当我有一个进度条时,我当然不希望我的整个控制台被清除,因为我需要看看之前发生了什么。 -1 如果您在内部存储状态并每次都重写,则不会。对于复杂的 ASCII 图表或图形,例如 this memtest console,我很确定清除控制台是非常标准的。 这与在任何 Windows 控件中将状态存储在变量中并每次在每个 WM_PAINT 上重新绘制整个控件的方式没有太大区别。 并不是说如果你只是想重写 1 行你会这样做,但它是复杂 ASCII 格式的有效方法。 您确实意识到 *** 上的答案不仅适用于 OP?它们适合每个人在几年内找到类似的搜索词。提问者可能会搜索“Console.Clear”以寻找替代品并在此线程中找到“Console.SetWindowPosition”,反之亦然。最好用所有解决方案来回答。

以上是关于*忽略* C++和C#如何在命令行中显示百分比[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在命令行中可靠地使用“rem”而不忽略相邻命令?

如何在命令行中编译 ZipFile 类(C#)

有没有办法防止Windows命令行中env变量的百分比扩展?

如何在 Visual Studio 2003 中重命名 C++ 源文件?

如何将标准输入重定向到 Windows 命令行中的文件?

如何在命令行中编译和链接项目?