Есть несколько проблем с вашим кодом:
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 или «» для инициализации строки?