无法获取while循环工作

问题描述:

我正在使用while循环使其在用户输入除“Yes”或“No”之外的任何内容时,它会告诉他们输入新的内容,但每次输入其他内容时只是垃圾邮件“这不是一个选项”,而不是从顶端开始。有人可以向我解释为什么?先谢谢你。无法获取while循环工作

   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(); 


     } 

    } 





    } 
} 
+0

你没读过的用户选择第二次,你这样做的,而循环之外,然后在循环里,你只是打印“这是不是一种选择“并重复。只需用你在while循环之外的同一行更新你的代码就可以了:'Choice1 = Console.ReadLine();' – pstrjds

+0

顺便说一句,欢迎来到SO。您正在学习编程并且我不希望您在提问时感到气馁,即使我已经投票决定将此问题视为排版错误的结果。当你学习编程时,你会有更多的问题,这是一个很好的论坛来解答这些问题。作为另一个无关的方面说明,您可能希望在比较时使用[string.Equals](https://msdn.microsoft.com/en-us/library/858x0yyx(v = vs.110).aspx)方法'strings'。它允许您在比较时指定序号,区分大小写,文化等。 – pstrjds

+0

非常感谢! – Laneciar

该程序正在等待用户输入新的答案后,它打印出“这不是一个选项”,你只是从来没有提示他们。你也绝不会存储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(); 
} 
+0

非常感谢你! – Laneciar

可能你的问题是你没有对输入做出正确的验证。 现在,您从控制台读取输入并与静态字符串进行比较,因此 “添加”与“添加”不同,并且与“添加(空间)”不同。 我建议你做一个更强大的输入验证:

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?"); 
    .... 
} 
+0

根据提示的提示,“区分大小写”的验证是正确的,为了使其不区分大小写,最好使用接受比较类型的'string.Equals'覆盖,比如'OrdinalIgnoreCase'或其他类似的东西。然而,重复循环的问题与从控制台读取的else语句中的“添加”它的验证无关,但将结果转储到地板上,因此循环继续检查相同的错误值,而不是存储最新的一个进入。 – pstrjds

+0

我知道,我为新用户提供了一个简单的解决方案。如果我实现了这个功能,我将使用带有标志的enum.TryParse。我的回答是关于正确输入验证的重要性。 – Linefinc

+0

我明白你在说什么,我正在解释我的downvote的原因,你没有回答实际问题。问题在于没有读入循环中的输入,而不是用户键入“添加”的验证,但你声明“可能你的问题是你没有做出正确的验证......” – pstrjds