【问题标题】:how to keep asking user question until desired input is gotten?如何不断询问用户问题,直到获得所需的输入?
【发布时间】:2020-03-04 03:03:56
【问题描述】:

我做了一个乘法测试,用户选择一个难度,然后选择他们想回答的问题!

但如果用户输入的不是难度级别,那么代码只会发送一条消息然后停止。 如果用户输入的不是正整数,那么代码就会结束。

我希望程序不断询问难度级别,直到他们给出正确的输入。 我还希望程序不断询问用户想要回答多少个问题,直到他们给出一个整数。

有人可以帮我吗?

我已经写了这段代码:


namespace mathstester
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("What difficulty level would you like to do! Please type E for Easy, N for Normal and H for hard");
            string userDifficulty = Console.ReadLine();
            if (userDifficulty == "E")
            {
                Console.Write("How many questions would you like to answer? ");
                int numberOfEasyQuestions = Convert.ToInt32(Console.ReadLine());
                int numberOfEasyQuestionsLeft = numberOfEasyQuestions;

                Random easyRandom = new Random();
                int easyNumber1 = easyRandom.Next(10);
                int easyNumber2 = easyRandom.Next(10);
                int easyScore = 0;

                while (numberOfEasyQuestionsLeft > 0)
                {
                    Console.Write($"What is {easyNumber1} * {easyNumber2} =");
                    int easyCorrectAnswer = easyNumber1 * easyNumber2;
                    int easyUserAnswer = Convert.ToInt32(Console.ReadLine());
                    if (easyCorrectAnswer == easyUserAnswer)
                    {
                        Console.WriteLine("Well Done!");
                        easyScore++;
                    }
                    else
                    {
                        Console.WriteLine("Your answer is incorrect!");
                    }
                    numberOfEasyQuestionsLeft--;
                    easyNumber1 = easyRandom.Next(10);
                    easyNumber2 = easyRandom.Next(10);
                }
                Console.WriteLine($"You got a score of {easyScore} out of {numberOfEasyQuestions}");
            }
            else if (userDifficulty == "N")
            {
                Console.Write("How many questions would you like to answer? ");
                int numberOfNormalQuestions = Convert.ToInt32(Console.ReadLine());
                int numberOfNormalQuestionsLeft = numberOfNormalQuestions;

                Random normalRandom = new Random();
                int normalNumber1 = normalRandom.Next(100);
                int normalNumber2 = normalRandom.Next(100);
                int normalScore = 0;

                while (numberOfNormalQuestionsLeft > 0)
                {
                    Console.Write($"What is {normalNumber1} * {normalNumber2} =");
                    int normalCorrectAnswer = normalNumber1 * normalNumber2;
                    int normalUserAnswer = Convert.ToInt32(Console.ReadLine());
                    if (normalCorrectAnswer == normalUserAnswer)
                    {
                        Console.WriteLine("Well Done!");
                        normalScore++;
                    }
                    else
                    {
                        Console.WriteLine("Your answer is incorrect!");
                    }
                    numberOfNormalQuestionsLeft--;
                    normalNumber1 = normalRandom.Next(100);
                    normalNumber2 = normalRandom.Next(100);
                }
                Console.WriteLine($"You got a score of {normalScore} out of {numberOfNormalQuestions}");
            }
            else if (userDifficulty == "H")
            {
                Console.Write("How many questions would you like to answer? ");
                int numberOfHardQuestions = Convert.ToInt32(Console.ReadLine());
                int numberOfHardQuestionsLeft = numberOfHardQuestions;

                Random hardRandom = new Random();
                int hardNumber1 = hardRandom.Next(10, 1000);
                int hardNumber2 = hardRandom.Next(10, 1000);
                int hardScore = 0;

                while (numberOfHardQuestionsLeft > 0)
                {
                    Console.Write($"What is {hardNumber1} * {hardNumber2} =");
                    int hardCorrectAnswer = hardNumber1 * hardNumber2;
                    int hardUserAnswer = Convert.ToInt32(Console.ReadLine());
                    if (hardCorrectAnswer == hardUserAnswer)
                    {
                        Console.WriteLine("Well Done!");
                        hardScore++;
                    }
                    else
                    {
                        Console.WriteLine("Your answer is incorrect!");
                    }
                    numberOfHardQuestionsLeft--;
                    hardNumber1 = hardRandom.Next(10, 1000);
                    hardNumber2 = hardRandom.Next(10, 1000);
                }
                Console.WriteLine($"You got a score of {hardScore} out of {numberOfHardQuestions}");
            }
            else
            {
                Console.WriteLine("Sorry, This is not an option");
            }
        }
    }
}```

【问题讨论】:

  • 您可以创建一个函数来包含此逻辑,然后在 else 语句中,如果他们没有提供正确的输入,请再次调用该函数。

标签: c# user-input


【解决方案1】:

do while 循环是您想要的,但在这种情况下,将逻辑移动到新函数中也可能有意义,然后如果不满足所需的输入,则在 else 语句中递归调用该函数。

当询问他们想要多少问题时,您还需要添加一些额外的逻辑以确保输入的是 int。因此,不要使用 Convert.ToInt32(),如果他们没有输入整数会引发异常,而是使用 int.TryParse() 来设置 numberOfEasyQuestions 变量的值。

static void Main(string[] args)
    {

        MultiplicationTest();   

    }


    static void MultiplicationTest()
    {
        Console.WriteLine("What difficulty level would you like to do! Please type E for Easy, N for Normal and H for hard");
        string userDifficulty = Console.ReadLine();
        if (userDifficulty == "E")
        {
            int numberOfEasyQuestions =0;
            int numberOfEasyQuestionsLeft = 0;
            do {
                Console.Write("How many questions would you like to answer? ");
                int.TryParse(Console.ReadLine(), out numberOfEasyQuestions);
                numberOfEasyQuestionsLeft = numberOfEasyQuestions;
            } while (numberOfEasyQuestions < 1);

            Random easyRandom = new Random();
            int easyNumber1 = easyRandom.Next(10);
            int easyNumber2 = easyRandom.Next(10);
            int easyScore = 0;

            while (numberOfEasyQuestionsLeft > 0)
            {
                Console.Write($"What is {easyNumber1} * {easyNumber2} =");
                int easyCorrectAnswer = easyNumber1 * easyNumber2;
                int easyUserAnswer = Convert.ToInt32(Console.ReadLine());
                if (easyCorrectAnswer == easyUserAnswer)
                {
                    Console.WriteLine("Well Done!");
                    easyScore++;
                }
                else
                {
                    Console.WriteLine("Your answer is incorrect!");
                }
                numberOfEasyQuestionsLeft--;
                easyNumber1 = easyRandom.Next(10);
                easyNumber2 = easyRandom.Next(10);
            }
            Console.WriteLine($"You got a score of {easyScore} out of {numberOfEasyQuestions}");
        }
        else if (userDifficulty == "N")
        {
            Console.Write("How many questions would you like to answer? ");
            int numberOfNormalQuestions = Convert.ToInt32(Console.ReadLine());
            int numberOfNormalQuestionsLeft = numberOfNormalQuestions;

            Random normalRandom = new Random();
            int normalNumber1 = normalRandom.Next(100);
            int normalNumber2 = normalRandom.Next(100);
            int normalScore = 0;

            while (numberOfNormalQuestionsLeft > 0)
            {
                Console.Write($"What is {normalNumber1} * {normalNumber2} =");
                int normalCorrectAnswer = normalNumber1 * normalNumber2;
                int normalUserAnswer = Convert.ToInt32(Console.ReadLine());
                if (normalCorrectAnswer == normalUserAnswer)
                {
                    Console.WriteLine("Well Done!");
                    normalScore++;
                }
                else
                {
                    Console.WriteLine("Your answer is incorrect!");
                }
                numberOfNormalQuestionsLeft--;
                normalNumber1 = normalRandom.Next(100);
                normalNumber2 = normalRandom.Next(100);
            }
            Console.WriteLine($"You got a score of {normalScore} out of {numberOfNormalQuestions}");
        }
        else if (userDifficulty == "H")
        {
            Console.Write("How many questions would you like to answer? ");
            int numberOfHardQuestions = Convert.ToInt32(Console.ReadLine());
            int numberOfHardQuestionsLeft = numberOfHardQuestions;

            Random hardRandom = new Random();
            int hardNumber1 = hardRandom.Next(10, 1000);
            int hardNumber2 = hardRandom.Next(10, 1000);
            int hardScore = 0;

            while (numberOfHardQuestionsLeft > 0)
            {
                Console.Write($"What is {hardNumber1} * {hardNumber2} =");
                int hardCorrectAnswer = hardNumber1 * hardNumber2;
                int hardUserAnswer = Convert.ToInt32(Console.ReadLine());
                if (hardCorrectAnswer == hardUserAnswer)
                {
                    Console.WriteLine("Well Done!");
                    hardScore++;
                }
                else
                {
                    Console.WriteLine("Your answer is incorrect!");
                }
                numberOfHardQuestionsLeft--;
                hardNumber1 = hardRandom.Next(10, 1000);
                hardNumber2 = hardRandom.Next(10, 1000);
            }
            Console.WriteLine($"You got a score of {hardScore} out of {numberOfHardQuestions}");
        }
        else
        {
            Console.WriteLine("Sorry, This is not an option");
            MultiplicationTest();
        }
    }

【讨论】:

    【解决方案2】:

    一个简单的do while会有所帮助:

    do
    {
        //Ask your question:
        Console.WriteLine("What difficulty level would you like to do! Please type E for Easy, N for Normal and H for hard");
    
        //read user input
        string userDifficulty = Console.ReadLine();        
    
        if (userDifficulty == "E")
        {
            //do for E
            break;
        }
        else if (userDifficulty == "N")
        {
            //do for N
            break;
        }
        else if (userDifficulty == "H")
        {
            //do for H
            break;
        }
    
    } while(userDifficulty != "E" && userDifficulty != "N" && userDifficulty != "H"); 
    //NOT E and NOT N and NOT H will repeat
    

    【讨论】:

      猜你喜欢
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多