【问题标题】:Input String was not in correct format || ConsoleApp输入字符串格式不正确 ||控制台应用程序
【发布时间】:2019-01-14 03:42:43
【问题描述】:

基本上我试图不让用户输入字符串而不是整数;但在代码行:

else if (Convert.ToString(result) == "")

我收到一个错误。

完整代码:

class Program
{
    static void Main(string[] args)
    {
        Console.ForegroundColor = ConsoleColor.Red;

        int calcKelvin = 273;
        int calcFahren = 32; 
        int result = Convert.ToInt32(Console.ReadLine());

        if (result == 0)
        {
            Console.WriteLine("Check it up on google!");
            Console.Title = "I'M USELESS CONSOLE, YOU CAN NOW EXIT || I'M USELESS CONSOLE, YOU CAN NOW EXIT || I'M USELESS CONSOLE, YOU CAN NOW EXIT ||";
        }
        else if (Convert.ToString(result) == "")
        {
            Console.Write("Error, you can not convert a text");
        }
        else 
        { 
            Console.WriteLine("Kelvin = " + calcKelvin * result);
            Console.WriteLine("Fahrenheit = " + calcFahren * result);
        }
    }
}

【问题讨论】:

  • 我对你的温度计算很感兴趣。除非您的用户输入“-40”,否则您无法通过简单的加法将整数转换为开尔文和华氏度。假设您的用户以摄氏度输入值,那么您可以添加 273.15 并获得开尔文温度。但是,您必须首先将设备的摄氏度温度除以 5,然后乘以 9,然后再加上 32 以得到华氏度。如果您还没有弄清楚,您也应该使用double 而不是int。而且,0 摄氏度是一个非常好的温度!

标签: c# console


【解决方案1】:

从字符串中获取数字最安全的方法是使用TryParse 方法,因为该方法返回两个 值!实际返回类型是bool,表示字符串是否转换成功,另一个是out参数,是我们要转换的类型,并设置为转换后的值(或者如果转换失败则设置为类型的默认值)。

对于温度,我们经常处理十进制数字,因此double 可能是存储结果的好类型。所以,我们将使用double.TryParse

现在,既然我们不一定想在用户犯错时退出,我们可能应该循环进行转换,所以如果失败,我们只是要求用户再试一次。由于这段代码也将在其他地方使用,我们可以创建一个辅助方法,接收我们向用户显示的提示,并返回强类型的用户响应:

private static double GetDoubleFromUser(string prompt = null)
{
    double result;

    do
    {
        Console.Write(prompt);
    } while (!double.TryParse(Console.ReadLine(), out result));

    return result;
}

有了这个方法,我们现在可以只声明一个 double 并将它分配给上面方法的返回值,比如:

double userInput = GetDoubleFromUser("Enter a temperature: ");

我们可以在代码中更正的另一件事是用于进行转换的公式。在线快速检查显示我们为开尔文添加了一个数字,我们为华氏进行了乘法、除法和加法。一旦我们从用户那里得到摄氏温度,我们就可以即时计算这些值:

private static void Main()
{
    double celcius = GetDoubleFromUser("Enter a Celcius temperature: ");

    double fahrenheit = celcius * 9 / 5 + 32;
    double kelvin = celcius + 273.15;

    Console.WriteLine("Kelvin = " + kelvin);
    Console.WriteLine("Fahrenheit = " + fahrenheit);

    GetKeyFromUser("Done! Press any key to exit...");
}

输出

【讨论】:

    【解决方案2】:

    Convert.ToInt32 如果输入字符串不是数字,则抛出异常。要解决此问题,您可以改用int.TryParse

    例子:

    using System;
    class Program
    {
    static void Main(string[] args)
    {
    
    Console.ForegroundColor = ConsoleColor.Red;
    
    
    int calcKelvin = 273;
    int calcFahren = 32; 
    int result;
    bool isNum=int.TryParse(Console.ReadLine(),out result);
    
    if (!isNum)
    {
        Console.Write("Error, you can not convert a text");
    }
    else if (result == 0)
    {
        Console.WriteLine("Check it up on google!");
        Console.Title = "I'M USELESS CONSOLE, YOU CAN NOW EXIT || I'M USELESS CONSOLE, YOU CAN NOW EXIT || I'M USELESS CONSOLE, YOU CAN NOW EXIT ||";
    }
    else { 
    
    Console.WriteLine("Kelvin = " + calcKelvin * result);
    Console.WriteLine("Fahrenheit = " + calcFahren * result);
    }
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多