为什么在尝试转换时此代码不起作用

时间:2020-09-30 10:24:23

标签: c#

这只是我尝试制作的一小段代码。我写的原始代码有效,但是我想确保用户输入数字时实际上是数字。

Console.WriteLine("Give the number of A");
A =Convert.ToDouble( Console.ReadLine());

if (char.IsNumber(Convert.ToDouble(A)) == correct)
{
    Console.WriteLine(Convert.ToDouble( A * A));  
   
}
else
{
    Console.WriteLine("Incorrecrt input");
}
           

我只写过Console.WriteLine(Convert.ToDouble(A*A));来看看是否行得通,但行不通。在用户仅输入数字后,我必须在另一个方程式中使用它来得出最终答案。用户必须输入3个数字。

2 个答案:

答案 0 :(得分:2)

对我来说,您应该检查输入的数字是否可以转换为双精度,然后再转换。

       Console.WriteLine("Give the number of A");
       
        var a = Console.ReadLine();
        double number;
        if (double.TryParse(a, out number))//double.TryParse takes a parameter and tries to convert it to double. If the convertion is successfull, sets the out parameter as result and returns true. If not, returns false. And you can use with other types like int.Tryparse(param, out outParam);
        {
            A = number;
        }
        else
        {
          //Not a number, show a message etc...
        {

答案 1 :(得分:2)

如果您将其分解:

A =Convert.ToDouble( Console.ReadLine());
if (char.IsNumber(Convert.ToDouble(A)) == correct)
{

}

您基本上在做什么:

Double A = Convert.ToDouble(Console.ReadLine());
Double dbl = Convert.ToDouble(A);
Boolean bl = char.IsNumber(dbl);

if (bl== correct)
{

}

所以这里有很多问题。

首先,您尝试转换用户输入而没有任何形式的成功保证,因此,如果有人键入“ A”而不是数字,则会抛出异常。

您应该使用TryParse,然后进行有效转换。

第二,您要检查Double是否是可以转换为数字的char。显然不是因为它已经是Double

第三,您要检查Boolean是否等于某个称为correct的变量(尚未提供其定义),因此尚不清楚这是否是有效的比较。 / p>

编辑:

这就是我要做的:

bool validInput = false;
do
{
    Console.WriteLine("Give the number of A");
    string userInput = Console.ReadLine();

    if (double.TryParse(userInput, out double result))
    {
        validInput = true;
        Console.WriteLine(result * result);
        Console.ReadLine();
    }
    else
    {
        Console.WriteLine("Invalid input. Please type a number.");
    }
} while (!validInput);