C # Console Очистить строку ввода - PullRequest
0 голосов
/ 30 октября 2018

У меня есть консольная программа на C #, которая запрашивает у пользователя определенное слово, показывая подсказку ввода. Затем ввод обрабатывается с помощью оператора switch. Если слово верное, программа продолжается. Но если ввод не совпадает, программа говорит «Ошибка: неверный ввод» и затем возвращается к приглашению ввода. Сложность в том, что я хочу, чтобы программа очистила ввод, который пользователь только что набрал перед нажатием Enter, и снова запросила пользователя, не делая другого отдельного приглашения под первым.

Есть ли какая-нибудь библиотека в C #, которая делает что-то подобное, или мне нужно сделать библиотеку для этого?

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Попробуйте это ...

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;
            }
        }
    }
0 голосов
/ 30 октября 2018

Один из способов сделать это - использовать комбинацию 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;
}

При использовании это может выглядеть следующим образом:

static void Main(string[] args)
{
    var validResponses = new List<string> {"Yes", "No"};

    var userInput = GetUserInput("Do you like me? ", validResponses);

    if (userInput.Equals("Yes", StringComparison.OrdinalIgnoreCase))
    {
        Console.WriteLine("I like you too!");
    }
    else
    {
        Console.WriteLine("And all along I thought you had good taste.");
    }

    GetKeyFromUser("\nDone! Press any key to exit...");
}

Вот пример запуска программы. Мне пришлось включить несколько скриншотов, так как ответ (и затем сообщение об ошибке) очищаются на каждой итерации:

enter image description here

...