【问题标题】:showing percentage in .net console application在 .net 控制台应用程序中显示百分比
【发布时间】:2010-11-25 15:40:28
【问题描述】:

我有一个执行冗长过程的控制台应用程序。

我在一个新行上打印完成百分比,每完成 1%

如何让程序在控制台窗口的同一位置打印出完成百分比?

【问题讨论】:

标签: c# .net console-application


【解决方案1】:

打印\r 回到行首(但不要打印换行符!)

例如:

using System;
using System.Threading;

class Test
{
    static void Main()
    {
        for (int i=0; i <= 100; i++)
        {
            Console.Write("\r{0}%", i);
            Thread.Sleep(50);
        }
    }
}

【讨论】:

  • 是的,这是最简单的方法。确保(如果您将它用于可变长度的字符串)您记得在行尾用空格覆盖。例如将“99% 完成”替换为“完成!”将显示“完成!完成”行 - 不理想。 :)
  • Jon Skeet:抱歉,堆栈溢出似乎无法让我正确回滚 ronnies 对您帖子的编辑。请自己尝试。
  • 值得注意的是,这段代码在非 Windows 操作系统上运行时将不起作用。我推荐SecCursorPosition 方法。
  • @silky:我刚刚在 Linux 上用 Mono 运行过它,它没有任何问题。但是,使用您的建议没有 - 因为它将百分比放在屏幕顶部,而不是与“你好:”在同一行。这当然是可以解决的,但它确实显示了简单解决方案的优势:)
  • 如果您正在打印可变长度字符串(即小数位或 % 可以增加或减少),您可以在格式字符串中添加对齐:"{0,3}%"(最多对齐 3 个空格) , 添加占位符 0 的 "{0:000.0}%" 或添加尾随空格以掩盖暴露的字符 "{0}% _ _ _ _ _"
【解决方案2】:

你可以使用:

Console.SetCursorPosition();

适当地设置位置。

像这样:

Console.Write("Hello : ");
for(int k = 0; k <= 100; k++){
    Console.SetCursorPosition(8, 0);
    Console.Write("{0}%", k);
    System.Threading.Thread.Sleep(50);
}

Console.Read();

【讨论】:

    猜你喜欢
    • 2012-12-03
    • 1970-01-01
    • 2011-11-19
    • 2021-09-03
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多