C#控制台清除输入行

时间:2018-10-29 23:12:05

标签: c# console prompt

我有一个C#控制台程序,该程序通过显示输入提示来询问用户某个单词。然后使用switch语句处理输入。如果单词正确,程序将继续。但是,如果输入不匹配,程序将显示“错误:输入无效”,然后返回到输入提示。棘手的部分是,我希望程序在按Enter之前清除用户刚刚输入的输入并再次提示用户,而不必在第一个提示下方另外输入提示。

在C#中是否存在某种类似的库,或者是否需要为其创建库?

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用val()Console.SetCursorPosition的组合来将光标设置为响应的开头,写入足够的空格以“擦除”其响应,然后设置再次回到起点。

例如:

Console.Write

在使用中,它可能类似于:

static string GetUserInput(string prompt, List<string> validResponses)
{
    Console.Write(prompt);

    // Capture the cursor position just after the prompt
    var inputCursorLeft = Console.CursorLeft;
    var inputCursorTop = Console.CursorTop;

    // Now get user input
    string input = Console.ReadLine();

    while (validResponses != null &&
           validResponses.Any() &&
           !validResponses.Contains(input, StringComparer.OrdinalIgnoreCase))
    {

        Console.ForegroundColor = ConsoleColor.Red;
        // PadRight ensures that this line extends the width
        // of the console window so it erases itself each time
        Console.Write($"Error! '{input}' is not a valid response".PadRight(Console.WindowWidth));
        Console.ResetColor();

        // Set cursor position to just after the promt again, write
        // a blank line, and reset the cursor one more time
        Console.SetCursorPosition(inputCursorLeft, inputCursorTop);
        Console.Write(new string(' ', input.Length));
        Console.SetCursorPosition(inputCursorLeft, inputCursorTop);

        input = Console.ReadLine();
    }

    // Erase the last error message (if there was one)
    Console.Write(new string(' ', Console.WindowWidth));

    return input;
}

这是该程序的示例运行。由于每次迭代都会清除响应(然后是错误消息),因此我必须包括几个屏幕截图:

enter image description here

答案 1 :(得分:0)

尝试一下...

static void Main(string[] args)
{

CheckWord();
Console.ReadKey();
}

    private static void CheckWord()
    {
        while (true)
        {
            string errorMessage = "Error: invalid input ... enter a valid entry";
            string word = Console.ReadLine(); 
            if (word != "word")
            {
                Console.SetCursorPosition(word.Length +1 , (Console.CursorTop) - 1);
                Console.Write(errorMessage);
                Console.ReadKey();
                Console.SetCursorPosition(0, Console.CursorTop);
                for (int i = 0; i <= word.Length + errorMessage.Length +1 ; i++)
                {
                    Console.Write(" ");
                }
                Console.SetCursorPosition(0, Console.CursorTop);
            }
            else
            {

                break;
            }
        }
    }