Есть ли способ отобразить два разных ответа на вопрос «Да / Нет»? - PullRequest
0 голосов
/ 04 апреля 2020

Я впервые использую Stackoverflow. Я новичок в программировании, а английский sh является второстепенным языком, так что будьте терпеливы к любым ошибкам или недоразумениям.

Я пытаюсь закодировать вопрос «да / нет» с тремя различными выводами относительно того, что набрал пользователь. Я попытаюсь объяснить.

Я показываю вопрос, на который пользователь должен ответить «Y» или «N». Если он нажимает на любую другую клавишу, на ней будет отображаться «Вы сделали ошибку, попробуйте еще раз», и его попросят снова нажать «Y» или «N».

Если он нажимает «Y», я хочу отобразить сообщение, говорящее что-то вроде «Хорошо, давайте go!» и если он нажимает «N», я хочу отобразить сообщение, говорящее что-то вроде «Это печально», и здесь консоль приложения закрывается.

Я пробовал и искал другой учебник, но ни один из них, похоже, не отвечает именно на то, что я хочу.

Вот код, который у меня сейчас есть:

void YesNo()

       bool confirmedY = false;
       bool confirmedN = false;

       do
       {
           ConsoleKey response;
           ConsoleKey response2;  

           do
           {
             response = Console.ReadKey(true).Key;

             if(response != ConsoleKey.Enter)
                 Console.WriteLine("You've made a mistake !\n Please try again [Y/N]");

            } while (response != ConsoleKey.Y && response != ConsoleKey.N);

            confirmedY = response == ConsoleKey.Y; 
            response2 = Console.ReadKey(true).Key;
            confirmedN = response2 == ConsoleKey.N;

            if(confirmedY)
                Console.WriteLine("Too bad for you !");

            if(confirmedN)
                Console.WriteLine("That's a good choice! Let's go");

        } while (!confirmedY && !confirmedN);

        Console.WriteLine("That's a good choice! Let's go");

Надеюсь, это понятно! Спасибо за вашу помощь

1 Ответ

2 голосов
/ 04 апреля 2020

В вашем коде так много логических проблем.

            do
            {
                response = Console.ReadKey(true).Key;

                if (response != ConsoleKey.Enter)
                    Console.WriteLine("You've made a mistake !\n Please try again [Y/N]");

            } while (response != ConsoleKey.Y && response != ConsoleKey.N);

Первый ответ - это не Enter, это означает, что событие, которое вы даете всем ключам (включая Y / N), кроме Enter, будет показывать «Вы сделали ошибку»

Другая проблема если вы используете чтение ключа 2 раза, это вообще не имеет смысла

            confirmedY = response == ConsoleKey.Y;
            response2 = Console.ReadKey(true).Key;
            confirmedN = response2 == ConsoleKey.N;

И другое: 2 раза нет необходимости l oop, используйте код повторно, ...

Мой рефакторинг

    static bool IsValidKey(ConsoleKey key)
    {
        return key == ConsoleKey.Y || key == ConsoleKey.N;
    }

    static void YesNo()
    {
        Console.WriteLine("Click [Y/N]");

        do
        {
            var response = Console.ReadKey(true).Key;

            if (!IsValidKey(response))
            {
                Console.WriteLine("You've made a mistake !\n Please try again [Y/N]");
                continue;
            }


            if (response == ConsoleKey.Y)
            {
                Console.WriteLine("That's a good choice! Let's go");
                break;
            }

            if (response == ConsoleKey.N)
            {
                Console.WriteLine("Too bad for you !");
                break;
            }

        } while (true);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...