L oop либо не работает, либо никогда не заканчивается c# - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь выучить петли, и они вот-вот сломают меня. Этот oop либо не работал вообще, либо никогда не заканчивался, что привело к серьезному стрессу. Если бы кто-нибудь мог мне помочь, было бы здорово. План состоит в том, чтобы l oop продолжался до тех пор, пока кто-то не напишет «да / да» / «да» (желательно в любой форме «да»), а затем прервет и продолжит следующую часть кода, которая состоит из строк чтения и записи строк, не получив далеко, потому что l oop еще не дал мне. Очень благодарен за любой вклад.

        Console.WriteLine("Hello Inspector!");
        Console.WriteLine("Are you ready to identify the suspects? Just write yes and we'll get started.");
        string Start = Console.ReadLine();

        Startup();

        while (Start.Contains("")==false)
        {
            Console.WriteLine("Just type yes when you are ready.");

            if (Start.Contains("Yes") == true)
                Console.WriteLine("Let's start.");
            break;
        }
    }

    static void Startup()
    {
        string Start = Console.ReadLine();

        if (Start.Contains("yes") == true)
        {
            Console.Clear();
            Console.WriteLine("Here are the suspects:");
        }

        else
        {
            Console.WriteLine("Just type yes when you are ready.");
        }
    }
}

}

1 Ответ

2 голосов
/ 17 марта 2020

Есть несколько проблем с вашим кодом:

1) Вы только один раз прочитали ввод пользователя - как м. sh уже отмечено, вам нужно поставить

Start = Console.ReadLine();

внутри вашего while l oop.

2) Ваш break, который вы ожидаете поймать, только если ваше условие выполнено, выходит за рамки, потому что вы пропускаете { }, как это :

if (Start.Contains("Yes") == true)
{
    Console.WriteLine("Let's start.");
    break;
}

3) Непосредственно программная ошибка, но широко осуждаемая: явное сравнение логического значения. Просто используйте

if (Start.Contains("yes"))

вместо

if (Start.Contains("yes") == true)

4) Также уже упоминалось - используйте .ToLower(), чтобы разрешить любой входной регистр

if (Start.ToLower().Contains("yes"))

будет работать для yes, YES, yEs, YeS, ...

Сборка деталей для рабочего l oop

// many coding guidelines ask you to use string.Empty rather than "". [I.]
string Start = string.Empty; 

while (!Start.ToLower().Contains("yes"))
{
    Console.WriteLine("Just type yes when you are ready.");
    Start = Console.ReadLine();
}

Console.WriteLine("Let's start.");

Обратите внимание на отрицание ! для условия while - это заставляет ваш l oop работать до тех пор, пока условие не выполняется, вместо того, чтобы проверять внутри вашего l oop, если вам нужно выйти из него.

Другой путь к l oop может быть do { } while();, где ваше условие проверяется в конце l oop:

string Start = string.Empty;

do
{
    Console.WriteLine("Just type yes when you are ready.");
    Start = Console.ReadLine();
}
while (!Start.ToLower().Contains("yes"));

Если вы пошагово выполняете код, работающий в отладчике, вы заметит другое поведение и то, как do {} while() можно считать более быстрым кодом, чем while() { }.


I. В C#, должен ли я использовать string.Empty или String.Empty или «» для инициализации строки?

...