代码无法计算百分比

Code cannot calculate percentage

感谢大家的回答,真的帮了我大忙!

但是我 运行 遇到了一个新问题...在我正在编写的程序中,要求用户输入不同数学问题的答案,并且控制台会在每个问题后显示答案是否正确是正确的还是不正确的。最后,程序将显示有多少用户回答正确(百分比),这就是我 运行 正在解决的问题。

Console.Write("How many questions would you like to answer (Maximum value is '100'): ");
        string input = Console.ReadLine();
        int questionsAmount = int.Parse(input);

        int correctAnswers = 0;
        int IncorrectAnswers = 0;

        for (int i = 1; i <= questionsAmount; i++)
        {
            Console.WriteLine("===================");
            Console.WriteLine("Question " + i);
            Console.WriteLine();

            Random rnd = new Random();
            int rndNumber = rnd.Next(1, 100);
            int rndNumber2 = rnd.Next(1, 100);

            Console.Write("What equals " + rndNumber + " + " + rndNumber2 + " = ");
            string input2 = Console.ReadLine();
            int answer = int.Parse(input2);

            if (answer == rndNumber + rndNumber2)
            {
                correctAnswers++;
                Console.WriteLine("Answer correct.");
                Console.WriteLine("Correct answers: " + correctAnswers);
            }
            else
            {
                IncorrectAnswers++;
                Console.WriteLine("Answer incorrect.");
                Console.WriteLine("Incorrect answers: " + IncorrectAnswers);
            }
        }
        double percentage = correctAnswers / questionsAmount * 100;
        Console.WriteLine(percentage + "% of your answers was correct");

如您所见,一旦回答了所有问题,它就会计算百分比,但由于我已将变量 'correctAnswers' 分配给值“0”,计算结果将如下所示:0 / x * 100 = 0

如果我将变量 'correctAnswers' 和 'incorrectAnswers' 放在 for-statement 中,行 double percentage = correctAnswers / questionsAmount * 100; 将不起作用。

您正在寻找 else 块,而不是 catch 块:

while (true)
{
    Console.Write("What equals " + rndNumber1 + " + " + rndNumber2 + ": ");
    string input = Console.ReadLine();
    int answer = int.Parse(input);

    if (answer == rndNumber1 + rndNumber2)
    {
        Console.WriteLine("Your answer is correct.");
        break;
    }
    else
    {
        Console.WriteLine("Your answer is incorrect. Try again.");
    }
}

Try/catch 用于处理 异常 ,而不是应用程序逻辑。 ifelse 配对,而不是 catch.

例如,如果您尝试 int.Parse() 一个不是整数的值(例如一串字母),那么 that 将抛出异常,您可以在 catch 块中处理 that。 (或使用 int.TryParse() 来避免异常。)

catch 子句只有在抛出异常时才会执行。您想要的是将 "incorrect answer" 逻辑放在普通的 else 子句中。

  while (true)
    {
        try
        {
            Console.Write("What equals " + rndNumber1 + " + " 
                          + rndNumber2 + ": ");
            string input = Console.ReadLine();
            int answer = int.Parse(input);

            if (answer == rndNumber1 + rndNumber2)
            {
                Console.WriteLine("Your answer is correct.");
                break;
            }
            else
            {
               Console.WriteLine("Your answer is incorrect. Try again.");
               Console.ReadLine();
            }
        }
        catch
        {
            {
                Console.WriteLine("Sorry, something went wrong.");
            }
        }
    }

将可能引发异常的代码部分放在 try 块中,将处理异常的代码放在 catch 块中。 catch 块是一系列以关键字 catch 开头的语句,后跟异常类型和要采取的操作。
可以在else部分输出"wrong answer"提示符,如下图。 Try 和 catch 语句用于执行代码行 exception.What 您正在测试的不是代码中的异常 execution.It 只是一个不等于另一个的变量。

 {
            Random rnd = new Random();
            int rndNumber1 = rnd.Next(1, 100);
            int rndNumber2 = rnd.Next(1, 100);

            while (true)
            {
                try
                {
                    Console.Write("What equals " + rndNumber1 + " + " + rndNumber2 + ": ");
                    string input = Console.ReadLine();
                    int answer = int.Parse(input);

                    if (answer == rndNumber1 + rndNumber2)
                    {
                        Console.WriteLine("Your answer is correct.");
                        break;
                    }else{
     Console.WriteLine("Your answer is incorrect. Try again.");
    }
                }
                catch
                {

                }
            }
        }

try...catch控制块用于处理异常,即当遇到意外错误时,代码会跳转到cath部分。 在您的代码中,这部分 Console.WriteLine("Your answer is correct."); 只会在抛出运行时错误时执行,例如。 int.Parse() 无法解析该值。

当您尝试比较值时,您应该使用 if 流结构

{
    Random rnd = new Random();
    int rndNumber1 = rnd.Next(1, 100);
    int rndNumber2 = rnd.Next(1, 100);

    while (true)
    {
            Console.Write("What equals " + rndNumber1 + " + " + rndNumber2 + ": ");
            string input = Console.ReadLine();
            int answer = int.Parse(input);

            if (answer == rndNumber1 + rndNumber2)
            {
                Console.WriteLine("Your answer is correct.");
                break;
            }
            else
            {
                Console.WriteLine("Your answer is incorrect. Try again.");
            }
    }
}