c# - 控制台中的最后一行不会被覆盖

标签 c#

我想覆盖控制台中的最后一行以循环更改特定行。

例如: 我想打印到控制台 .然后..然后...

这是我的代码:

int dot = 1;
    while (true)
    {
        switch (dot)
        {
            case 1:
                Console.SetCursorPosition(0, Console.CursorTop-1);
                Console.WriteLine(".");
                dot++;
                Thread.Sleep(500);
                break;
            case 2:
                Console.SetCursorPosition(0, Console.CursorTop -1);
                Console.WriteLine("..");
                dot++;
                Thread.Sleep(500);
                break;
            case 3:
                Console.SetCursorPosition(0, Console.CursorTop - 1);
                Console.WriteLine("...");
                dot = 1;
                Thread.Sleep(500);
                break;
        }
    }
}

我的问题是,在第一个完整的回合之后(在第一次打印“...”之后)它不打印“。”控制台停留在“...”

我的意思是:

  • >“。”打印
  • 删除“。”并打印“..”
  • 删除“..”并打印“...”

现在它保留“...”而不是删除“...”并打印“.”。

有人知道为什么吗?

最佳答案

当您打印一个点时,您只打印了一个字符 - 您不会影响该行的其余部分。

如果你只是改变这个:

Console.WriteLine(".");

Console.WriteLine(".  ");

然后它将删除之前迭代写入的所有字符。 (不过,这仍然不会清除线路上的任何其他内容。)

(您可能希望将 Console.WriteLine("..") 更改为 Console.WriteLine(".. ") 以保持一致性,但它不会有所不同,因为您已经在上一次迭代中打印了最后一个空格。)

请注意,您也可以非常简单地删除重复:

string[] dots = { ".  ", "..", "..." };
int index = 0;
while (true)
{
    Console.SetCursorPosition(0, Console.CursorTop -1);
    Console.WriteLine(dots[index]);
    index = (index + 1) % 3;
    Thread.Sleep(500);
}

关于c# - 控制台中的最后一行不会被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47628323/

相关文章:

c# - 如何为DataGridCheckBoxColumn创建通用编辑样式?

c# - 如何避免正则表达式中除空格外的所有特殊字符?

c# - 为什么 DllImport 不适用于 "__Internal"?

c# - Memorystream.Read() 总是返回 0 bytesRead 和空 byte[]

c# - .* 匹配 2 次

c# - 如何使用 GSMComm 或 PduBitPacker 解码 PDU?

c# - 在 Windows Azure 上使用 C# 在电子邮件中发送附件

c# - 从 .NET Core 应用程序引用 .NET 4.6.2 类库

c# - C# .NetCF 2.0 中 String.Contains() 的解决方法?

c# - 使用客户端配置文件类库访问 web.config