*忽略* 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#如何在命令行中显示百分比[重复]的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法防止Windows命令行中env变量的百分比扩展?