如何不断询问用户问题,直到得到所需的输入



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

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

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

有人能帮我吗?

我写了这个代码:


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

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

当问他们想要多少个问题时,你还需要添加一些额外的逻辑来确保他们正在输入一个整数。因此,不要使用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();
}
}

一个简单的do-with可以帮助:

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

相关内容

最新更新