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

bad*_*boy 64 c#

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

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

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

引用问题更容易,因为存储和检索值.如果我只是使用方法来传递值并输出值,main()则不会引用这些值来清除并再次输出.这就是为什么我想知道我是否可以问一个问题,然后删除该行并仅输出答案(或答案).

我只是想了解可能性而不是尝试设置程序.我想知道从引用和值输出值的能力,没有额外的输出问题.

dkn*_*ack 123

描述

您可以使用该Console.SetCursorPosition功能转到特定的行号.比您可以使用此功能清除该行

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

样品

Console.WriteLine("Test");
Console.SetCursorPosition(0, Console.CursorTop - 1);
ClearCurrentConsoleLine();
Run Code Online (Sandbox Code Playgroud)

更多信息

  • 这段代码应该使用`Console.BufferWidth`而不是`Console.WindowWidth`,因为可能会在可见窗口区域之外写入字符. (6认同)

hel*_*low 38

一个更简单,更好的解决方案是:

Console.Write("\r" + new string(' ', Console.WindowWidth) + "\r");
Run Code Online (Sandbox Code Playgroud)

它使用回车符到行的开头,然后打印出与控制台宽度一样多的空格并再次返回到行的开头,这样您就可以打印自己的测试了.

  • 对我来说,它仅适用于Console.WindowWidth-1:`Console.Write("\ r"+ + new string('',Console.WindowWidth - 1)+"\ r");` (23认同)

Use*_*789 10

"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);
}
Run Code Online (Sandbox Code Playgroud)

  • 我不能回答自己的岗位时,我没有足够的声誉,我联系不上评论的作者,由于没有找到他们的电子邮件,也没有垃圾邮件在我的答案是相同的(不是原来的)解决方案的点. (6认同)

bar*_*rdt 8

这对我有用:

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


Joh*_*ohn 5

我的首选方法是使用 PadRight。这不是先清除行,而是在显示新文本后清除行的其余部分,从而节省了一个步骤:

Console.CursorTop = 0;
Console.CursorLeft = 0;
Console.Write("Whatever...".PadRight(Console.BufferWidth));
Run Code Online (Sandbox Code Playgroud)

  • `(BufferWidth -1)` 不会溢出该行。 (2认同)