Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我不能去上班_C# - Fatal编程技术网

C# 我不能去上班

C# 我不能去上班,c#,C#,我使用了while循环,如果用户输入的不是“Yes”或“No”,它会告诉他们输入新的内容,但每次他们在其中输入其他内容时,都会弹出“这不是一个选项”,而不是从头开始。有人能给我解释一下原因吗?先谢谢你 using System; class CalculatorProgram { //varibale for do-while loop private static string endAnswer; public static void M

我使用了while循环,如果用户输入的不是“Yes”或“No”,它会告诉他们输入新的内容,但每次他们在其中输入其他内容时,都会弹出“这不是一个选项”,而不是从头开始。有人能给我解释一下原因吗?先谢谢你

              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”的验证,但你表示“可能你的问题是没有进行正确的验证…”