Console.Clear可以用来清除一行而不是整个控制台吗?

在为学校开展问题/答案计划时,我想到我可以使用Console.Clear()擦除屏幕上的所有内容。 我不知道是否可以使用Console.Readline(valueOne) ,然后输出没有问题的答案。 如果我只问了一个问题, Console.Clear工作。

我有几个问题的价值不参考,擦除,如果可能的话。 我想省略问题,只显示几个答案。 我想如果我存储的答案,我可以使用Console.Clear()然后只有三个variablesConsole.WriteLine() 。 我可以做这样的事情:

 Console.WriteLine("Value 1 is: {0:c}" + "Value 2 is: {1:c}" + "Value 3 is: {2:c}, valueOne, valueTwo, valueThree). 

引用问题更容易,因为值存储和检索。 如果我简单地使用方法传递值并输出值, main()将不会引用这些值来清除并重新输出。 这就是为什么我不知道我是否可以问一个问题,然后抹掉这条线,只输出答案(或答案)。

我只是想了解可能性,而不是试图设置一个程序。 我喜欢了解从参考和价值中输出一个值的能力,而不需要额外的输出问题。

描述

您可以使用Console.SetCursorPosition函数转到特定的行号。 比你可以使用这个function清除线

 public static void ClearCurrentConsoleLine() { int currentLineCursor = Console.CursorTop; Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, currentLineCursor); } 

样品

 Console.WriteLine("Test"); Console.SetCursorPosition(0, Console.CursorTop - 1); ClearCurrentConsoleLine(); 

更多信息

  • Console.SetCursorPosition方法

一个简单的和更好的解决scheme是这样的:

 Console.Write("\r" + new string(' ', Console.WindowWidth) + "\r"); 

这工作我,

 static void ClearLine(){ Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); } 

“ClearCurrentConsoleLine”,“ClearLine”和其他上面的函数应该使用Console.BufferWidth而不是Console.WindowWidth(你可以看到为什么当你尝试使窗口变小)。 控制台的窗口大小目前取决于其缓冲区,不能比它宽。 例子(感谢Dan Cornilescu):

 public static void ClearLastLine() { Console.SetCursorPosition(0, Console.CursorTop - 1); Console.Write(new string(' ', Console.BufferWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); } 

我们不能在课堂上写这个吗?

 public static void ClearLine() { Console.SetCursorPosition(0, Console.CursorTop - 1); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); } 

然后在主要,只需键入

 Console.WriteLine("Test"); ClearLine(); 

它对我很好

要从当前位置清除到当前行的末尾,请执行以下操作:

  public static void ClearToEndOfCurrentLine() { int currentLeft = Console.CursorLeft; int currentTop = Console.CursorTop; Console.Write(new String(' ', Console.WindowWidth - currentLeft)); Console.SetCursorPosition(currentLeft, currentTop); } 

我最喜欢的方法是使用PadRight。 不是先清除行,而是在显示新文本后清除行的其余部分,保存一个步骤:

 Console.CursorTop = 0; Console.CursorLeft = 0; Console.Write("Whatever...".PadRight(Console.BufferWidth)); 
 public static void ClearLine(int lines = 1) { for (int i = 1; i <= lines; i++) { Console.SetCursorPosition(0, Console.CursorTop - 1); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); } } 

我想我发现为什么这个问题有几个不同的答案。 当窗口已被resize,使其具有水平滚动条(因为缓冲区大于窗口)Console.CursorTop似乎返回错误的行。 以下代码适用于我,无论窗口大小或光标位置如何。

 public static void ClearLine() { Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - (Console.WindowWidth >= Console.BufferWidth ? 1 : 0)); } 

如果没有(Console.WindowWidth> = Console.BufferWidth?1:0),则代码可能会上下移动光标,具体取决于您在此页面使用的版本以及窗口的状态。