Блок кода пропускается на второй итерации цикла while

#c# #.net #loops #while-loop

#c# #.net #циклы #цикл while

Вопрос:

У меня есть этот код, который запрашивает у пользователя x и y :

 do
{
    Console.Write("x = ");
    string str = Console.ReadLine();
    if (str.ToLower().Equals("exit"))
    {
        Console.WriteLine("Program has stopped");
        break;
    }
    else
    {
        while (!int.TryParse(str, out x))
        {
            Console.Write("x = ");
            str = Console.ReadLine();
        }
        while (!int.TryParse(yVal, out y))
        {
            Console.Write("y = ");
            yVal = Console.ReadLine();
        }
    }

    Console.WriteLine("Do you want to Add, Subtract, Multiply, or Divide ?");
    f = Console.ReadLine();
    if (f.ToLower().Equals("add"))
    {
        sum = x   y;
        Console.WriteLine("Result: {0}", sum);
    }
    else if (f.ToLower().Equals("subtract"))
    {
        difference = x - y;
        Console.WriteLine("Result: {0}", difference);
    }
    else if (f.ToLower().Equals("multiply"))
    {
        product = x * y;
        Console.WriteLine("Result: {0}", product);
    }
    else if (f.ToLower().Equals("divide"))
    {
        quotient = x / y;
        Console.WriteLine("Result: {0}", quotient);
    }
}
while (true);
  
  • С первой попытки все проходит гладко, но
  • На втором он запрашивает x и пропускает запрос y напрямую

Как я могу это решить?

Комментарии:

1. установите yVal значение по умолчанию в конце вашего цикла do-while.

2. @SomeBody прошу прощения, я все еще новичок в программировании. как мне это сделать?

3. yVal = "" любое место после while (!int.TryParse(yVal . Потому что ваш предыдущий ввод все еще находится в yVal. while (!int.TryParse( Console.ReadLine(), out y)) таким образом, больше нет кэширования пользовательского ввода в переменной.

4. Возможно, вы захотите проверить ExtendedConsole . Это проект с открытым исходным кодом, лицензированный MIT, разработанный для облегчения вашей жизни при написании консольных приложений. Полное раскрытие — я его автор и (по крайней мере, в настоящее время) его единственный сопровождающий.