Цикл C # игнорирует условные выражения - PullRequest
0 голосов
/ 17 мая 2019

Я создал симулятор игры в кости в методе в программе класса.

А в методе Main я пытаюсь создать цикл, чтобы спросить пользователя, хочет ли он / она снова играть.

По какой-то причине цикл полностью игнорирует мои условные операторы, и я понятия не имею, почему.

Неважно, если я введу цифры или тарабарщину, игра все равно перезапускается.

Единственное, что работает, это когда я набираю "N" или "n", чтобы выйти.

        string alt;
        do
        {
            GameLogic();

            Console.WriteLine("Play again?");
            Console.WriteLine("[Y]es | [N]o");

            alt = Console.ReadLine();
            alt.ToLower();

            if (alt == "Y" || alt == "y")
            {
                Console.Clear();
                GameLogic();
            }
            else if (alt == "N" || alt == "n")
            {
                break;
            }
            else
            {
                Console.WriteLine("Invalid input!");
            }
        } while (alt != "N" || alt != "n");

        Console.WriteLine("\nPress any key to quit...");
        Console.ReadKey();

Я ожидаю, что он будет делать то, что требует условия. Если вы введете что-то еще, кроме «Y, y» или «N, n», должно появиться сообщение «Неверный ввод!».

Перезапуск игры возможен только в том случае, если вы введете «Y» или «y».

Ответы [ 2 ]

3 голосов
/ 17 мая 2019

Я решил это некоторым образом ... Мне пришлось переместить GameLogic (); вне петли.

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

Ваша логика немного нарушена.

Попробуйте этот код:

        string alt;
        bool firstRun = true;
        do
        {
            if (firstRun)
            {
                firstRun = false;
                GameLogic();
            }

            Console.WriteLine("Play again?");
            Console.WriteLine("[Y]es | [N]o");

            alt = Console.ReadLine();
            alt.ToLower();

            if (alt == "Y" || alt == "y")
            {
                Console.Clear();
                GameLogic();
            }
            else if (alt == "N" || alt == "n")
            {
                break;
            }
            else
            {
                Console.WriteLine("Invalid input!");             
            }
        } while (alt != "N" || alt != "n");

        Console.WriteLine("\nPress any key to quit...");
        Console.ReadKey();

В основном GameLogic исполняется в начале цикла do while.

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

...