Search code examples
c#user-input

how to keep asking user question until desired input is gotten?


I have made a multiplication test where the user selects a difficulty and then selects how many questions they would like to answer!

But if the user inputs something other than the difficulty level then the code will just send a message and then stop. And if the user inputs something other than a positive integer then the code will just end.

I want the program to keep asking for the difficulty level until they give a proper input. I also want the program to keep asking how many questions the user would like to answer until they give an integer.

Can someone please help me here?

I have written this code:


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");
            }
        }
    }
}```

Solution

  • A do while loop is what you want, but in this case it might also make sense to move the logic into a new function, then recursively call the function in the else statement if the desired input isn't met.

    When asking how many questions they'd like, you'll also want to add some additional logic to make sure that are entering an int. So instead of using Convert.ToInt32(), which would throw an exception if they didn't enter an integer, use int.TryParse() to set the value of your numberOfEasyQuestions variable.

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