C# 我不能去上班
我使用了while循环,如果用户输入的不是“Yes”或“No”,它会告诉他们输入新的内容,但每次他们在其中输入其他内容时,都会弹出“这不是一个选项”,而不是从头开始。有人能给我解释一下原因吗?先谢谢你C# 我不能去上班,c#,C#,我使用了while循环,如果用户输入的不是“Yes”或“No”,它会告诉他们输入新的内容,但每次他们在其中输入其他内容时,都会弹出“这不是一个选项”,而不是从头开始。有人能给我解释一下原因吗?先谢谢你 using System; class CalculatorProgram { //varibale for do-while loop private static string endAnswer; public static void M
using System;
class CalculatorProgram
{
//varibale for do-while loop
private static string endAnswer;
public static void Main() // <----- The Entry point
{
//Variables
string Choice1;
string mathChoice;
decimal Num1;
decimal Num2;
decimal Answer;
bool userWrong = true;
Console.Write("Would you like to use Lane's Custom Calculator?(Yes/No): ");
Choice1 = Console.ReadLine();
while(userWrong)
{
if (Choice1 == "Yes")
{
do
{
Console.Write("Would you like to Add, Subtract, Multiply, or Divide? (Case Sensitive): ");
mathChoice = Console.ReadLine();
//User inputs the 2 numbers
//Math Choices
if (mathChoice == "Add")
{
Console.WriteLine("What 2 numbers would you like to use?");
Console.Write("Number 1 is: ");
Num1 = decimal.Parse(Console.ReadLine());
Console.Write("Number 2 is: ");
Num2 = decimal.Parse(Console.ReadLine());
Answer = Num1 + Num2;
Console.WriteLine("Your expression is: " + Num1 + " + " + Num2 + " = " + Answer);
}
else if (mathChoice == "Subtract")
{
Console.WriteLine("What 2 numbers would you like to use?");
Console.Write("Number 1 is: ");
Num1 = decimal.Parse(Console.ReadLine());
Console.Write("Number 2 is: ");
Num2 = decimal.Parse(Console.ReadLine());
Answer = Num1 - Num2;
Console.WriteLine("Your expression is: " + Num1 + " - " + Num2 + " = " + Answer);
}
else if (mathChoice == "Multiply")
{
Console.WriteLine("What 2 numbers would you like to use?");
Console.Write("Number 1 is: ");
Num1 = decimal.Parse(Console.ReadLine());
Console.Write("Number 2 is: ");
Num2 = decimal.Parse(Console.ReadLine());
Answer = Num1 * Num2;
Console.WriteLine("Your expression is: " + Num1 + " X " + Num2 + " = " + Answer);
}
else if (mathChoice == "Divide")
{
Console.WriteLine("What 2 numbers would you like to use?");
Console.Write("Number 1 is: ");
Num1 = decimal.Parse(Console.ReadLine());
Console.Write("Number 2 is: ");
Num2 = decimal.Parse(Console.ReadLine());
Answer = Num1 / Num2;
Console.WriteLine("Your expression is: " + Num1 + " / " + Num2 + " = " + Answer);
}
else
{
Console.WriteLine("This is not an option! Shutting Down..");
Console.ReadKey();
Environment.Exit(0);
}
//varibale for while loop to continue if selected Yes.
Console.Write("Another Equation?: ");
endAnswer = Console.ReadLine();
} while (endAnswer == "Yes");
//Goodbye Message
Console.WriteLine("Thank you for using my program, goodbye ");
Console.ReadKey();
Environment.Exit(0);
userWrong = false;
}
//If someone selects no for wanting to use my program.
else if (Choice1 == "No")
{
Console.WriteLine("Thank you for using my program, goodbye ");
Console.ReadKey();
Environment.Exit(0);
}
else
{
Console.WriteLine("That is not an option");
Console.ReadLine();
}
}
}
}
使用系统;
类计算器程序
{
//用于do while循环的varibale
私有静态字符串结束应答;
public static void Main()//程序在打印出“这不是选项”后等待用户输入新答案您永远不会提示他们输入。您也永远不会根据他们的新输入再次存储Choice1
,因此它将始终检查do while循环中的第一个if
条件以及他们最初输入的内容
要修复它,请将您的else
分支主体更改为类似的内容
//...
else
{
Console.WriteLine("That is not an option");
// reprompt the user so they know to type something in
Console.Write("Would you like to use Lane's Custom Calculator?(Yes/No): ");
// store the new choice to recheck next loop iteration
Choice1 = Console.ReadLine();
}
您的问题可能是没有对输入进行正确的验证。
现在,您从控制台读取输入并与静态字符串进行比较
“添加”不同于“添加”,也不同于“添加(空格)”。
我建议您进行更有力的输入验证:
Console.Write("Would you like to Add, Subtract, Multiply, or Divide? (Case Sensitive): ");
mathChoice = Console.ReadLine();
mathChoice = mathChoice.ToUpper().Trim();
//User inputs the 2 numbers
//Math Choices
if (mathChoice == "ADD")
{
Console.WriteLine("What 2 numbers would you like to use?");
....
}
您从未第二次阅读用户选择,您在while循环外部执行此操作,然后在循环内部打印“这不是选项”并重复。只需使用while循环外部的相同行更新else块中的代码-Choice1=Console.ReadLine()
顺便说一句,欢迎来到SO。很高兴你正在学习编程,我不想让你对提问感到气馁,尽管我已经投票结束了这个问题,因为这是一个印刷错误。随着你学习编程,你会有更多的问题,这是一个回答这些问题的好论坛。正如另一个不相关的旁注是,在比较字符串时,您可能需要考虑使用该方法。它允许您在比较时指定序号、区分大小写、区域性等。非常感谢!非常感谢!如提示所示,区分大小写
的验证是正确的,最好是不区分大小写er使用接受比较类型的字符串.Equals
重写,如OrdinalingOreCase
或类似性质的内容。但重复循环的问题与“Add”的验证无关它在else语句中,从控制台读取结果,但将结果转储到地板上,因此循环继续检查相同的错误值,而不是存储输入的最新值。我知道,我为新用户提供了一个简单的解决方案。如果我实现此函数,我将使用带有标志的enum.TryParse。我的答案在impo上正确输入验证的重要性。我理解你的意思,我解释了我投反对票的原因,你没有回答实际问题。问题在于没有在循环中读取输入,而不是用户输入“Add”的验证,但你表示“可能你的问题是没有进行正确的验证…”