C#变量意外地改变了值

时间:2015-10-12 09:35:15

标签: c#

标题基本上都说明了一切。变量"回答"在我的代码中,在定义时随机将值更改为另一个随机数。 该程序应该询问十个随机数学问题并告诉用户他们是否得到了正确的答案,但这似乎并没有起作用。 一旦变量发生变化,程序就会再询问另外3个问题,并告诉用户每个问题的答案都是错误的。

   static void Main(string[] args)
    {

        Random R = new Random();
        double solution = 0;
        string sign = "";

        int score = 0;
        for (int i = 0; i < 10; i++)
        {
            int X = R.Next(1, 5);
            int Y = R.Next(1,10);
            int Z = R.Next(1,10);

            switch (X)
            {
                case 1:
                    solution = Y + Z;
                    sign = "+";
                    break;
                case 2:                       
                    solution = Y - Z;
                    sign = "-";
                    break;
                case 3:                        
                    solution = Y / Z;
                    sign = "/";
                    break;
                case 4:                        
                    solution = Y * Z;
                    sign = "X";
                    break;
            }
            Console.WriteLine("What is " + Y + " " + sign + " " + Z + "?");
             double answer = Console.Read();
            if (answer == solution)
            {
                Console.WriteLine("Correct");
                score = score + 1;
                Console.Read();
            }
            else if (answer != solution)
            {
                Console.WriteLine("Incorrect. The correct answer is " + solution);
                Console.Read();
            }
            else
            {
                Console.WriteLine("Error");
                Console.Read();
            }
        }
    }
}
}

4 个答案:

答案 0 :(得分:1)

您的问题出在Console.Read()。这将返回字符编号。从字符0的48(0x30)开始。这就是为什么你的所有答案都不正确的原因。

因此,我建议您使用Console.ReadLine(),然后将字符串解析为answer

        double answer;
        if (!double.TryParse(Console.ReadLine(), out answer))
        {
            Console.WriteLine("Error");
            continue;
        }

        if (answer == solution)
        {
            Console.WriteLine("Correct");
            score = score + 1;
        }
        else if (answer != solution)
        {
            Console.WriteLine("Incorrect. The correct answer is " + solution);
        }

答案 1 :(得分:1)

问题是您使用的Console.Read()只返回下一个字符代码。相反,您应该使用Console.ReadLine()。在检查答案后,您还会使用一些不必要的Console.Read()(s)。我删除了它们,这段代码工作得非常好: -

static void Main(string[] args)
{

    Random R = new Random();
    double solution = 0;
    string sign = "";

    int score = 0;
    for (int i = 0; i < 10; i++)
    {
        int X = R.Next(1, 5);
        int Y = R.Next(1,10);
        int Z = R.Next(1,10);

        switch (X)
        {
            case 1:
                solution = Y + Z;
                sign = "+";
                break;
            case 2:                       
                solution = Y - Z;
                sign = "-";
                break;
            case 3:                        
                solution = Y / Z;
                sign = "/";
                break;
            case 4:                        
                solution = Y * Z;
                sign = "X";
                break;
        }
        Console.WriteLine("What is " + Y + " " + sign + " " + Z + "?");
        double answer = double.Parse(Console.ReadLine());
        if (answer == solution)
        {
            Console.WriteLine("Correct");
            score = score + 1;
        }
        else if (answer != solution)
        {
            Console.WriteLine("Incorrect. The correct answer is " + solution);
        }
    }
}

另一件事是除法问题实际上是整数除法。如果你想要小数,你应该使用类似solution = Math.Round((double)((decimal)Y / (decimal)Z), 3);的东西来检查舍入到3位小数的值。

答案 2 :(得分:0)

我认为你的问题在于Console.Read为最后一个字符返回一个整数代码(详见https://msdn.microsoft.com/en-us/library/system.console.read(v=vs.110).aspx)。

你需要这样的代码:

double answer = double.Parse(Console.ReadLine());

这将获取整个输入(可能是多个字符)并将其转换为double(Console.ReadLine返回一个字符串),因此您要比较喜欢。

答案 3 :(得分:0)

Console.Read();

返回一个int值(ASCII码),你将它存储为double类型的答案!使用

Console.ReadLine();
而是!此外,您需要将您的答案转换为双倍值,以便能够比较您对解决方案的答案!