#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, разработанный для облегчения вашей жизни при написании консольных приложений. Полное раскрытие — я его автор и (по крайней мере, в настоящее время) его единственный сопровождающий.