【问题标题】:Erase only one already printed character from the console in c#在 C# 中从控制台中仅删除一个已打印的字符
【发布时间】:2018-11-08 15:55:10
【问题描述】:

所以我想创建一个脚本,它首先从(相当大的)二维数组中打印出值,然后通过擦除它并打印一个新字符来更改一个字符,而不清除整个控制台并重新绘制它,因为这会产生闪烁当我想经常更改时非常烦人。那么有没有办法替换或删除一个已经打印的字符或任何其他有效的方法呢?我只是不想闪烁。

【问题讨论】:

  • 您想修改控制台窗口中已经显示的输出,而不创建新行?

标签: c# console


【解决方案1】:

要删除控制台中输入的最后一个字符,可以使用以下命令:

Console.Write("\b");

但是,如果您尝试删除字符串中间的字符,则必须对所需字符进行一些巧妙的退格操作,然后重新打印字符串的其余部分。你可以写一个循环到退格直到你想删除的字符,将删除的字符添加到堆栈中,然后将它们弹出以重写它。

第二种方法效率很低,因为控制台命令自然很慢,而且确实滥用了控制台退格命令。

【讨论】:

  • 但我想删除已经打印的内容,并且很可能在另一行中
  • 您可以使用Console.SetCursorPosition(int, int) 在控制台周围移动光标。您可以从那里执行其他控制台操作。看看:stackoverflow.com/questions/22089645/…
  • 不幸的是,我认为控制台对于您想要实现的目标来说并不是一个好的 I/O。有很多更好的对象,例如 StringBuilder 并将结果输出到文件中,它们可以实现相同的目的,但对字符串修改有更多支持。
  • 我确实知道Console.SetCursorPosition(int, int),但我不能只移动光标并使用Console.Write("\b \b");,这不起作用
  • @DanielSiebert 将文件输出到文件是一个坏主意,因为我想要实时概览正在发生的事情以及 StringBuilder 是什么?
【解决方案2】:

移动光标并写一个空格“”。 (或任何您想用作替换的字符。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多