【问题标题】:Input string not in correct format when using Double for Decimals使用 Double for Decimals 时输入字符串的格式不正确
【发布时间】:2015-10-24 17:40:32
【问题描述】:
using System;

namespace FirstConsoleProject
{
    class MainClass
    {
        public static void Main (string[] args) 
        {

            Console.Write ("Please Put IP: ");
            double userip = Convert.ToDouble (Console.ReadLine()); //Error Here <--- Input string not in correct format
            Console.Write ("The User's IP is: " + userip);
            Console.ReadKey ();


        }
    }
}

基本上以前是

int userip = Convert.ToInt32 (Console.ReadLine());

但我知道 IP 是小数,所以我尝试使用 Double,所以我输入了

double userip = Convert.ToDouble (Console.ReadLine());

但现在问题是当我使用“Double”运行代码并输入类似 1.1.1.1 的内容时,它显示“输入字符串的格式不正确”。但是当我输入一个没有小数点的整数(如 23 或 2)时,它可以工作......为什么?

【问题讨论】:

  • IP地址不是十进制格式,使用IPAddress.TryParse

标签: c# string input integer format


【解决方案1】:

为什么?

因为 IP 地址不是double。它不是甚至一个数字。它是一种数字标签。仅包含一个带有一些数字的点并不能使其成为有效的双精度数(或任何数值)。

如果你喜欢的话,你可以用IPAddress.ParseIPAddress.TryParse 来解析它。

【讨论】:

  • 我明白你对实际 IP 地址的意思,但对于我的代码.. 我应该输入什么来接受小数本身,而不仅仅是一个 IP 地址?因为每次我输入 1.1.1.1 之类的东西时它的格式都不正确...
  • @Ivan 在您的代码中,也许您甚至都不需要解析它?你根本没有用它做任何事情。只需使用string userip = Console.ReadLine();Console.Write ("The User's IP is: " + userip); 将其作为字符串获取
  • 哦!它起作用了,谢谢,我很困惑,因为我认为字符串仅适用于像字母这样的文本字符,我不知道它可能适用于数字和小数..下次我应该让它更具体,但谢谢!
【解决方案2】:

IP 地址不是十进制格式,使用 IPAddress.Parse 或 TryParse

IPAddress userIp = IPAddress.Parse(Console.ReadLine);

https://msdn.microsoft.com/en-us/library/1b2h863h(v=vs.110).aspx

【讨论】:

  • 感谢您向我展示如何为 IP 添加 IPAddressIPAddress.Parse,但我想知道我的代码如何让程序本身接受小数而不会出错?它可以做整数,比如 1 或 23,但是当我输入像 1.1.1.1 这样的十进制数字时,它说它的格式不正确。
  • 如果您不知道他们会输入什么,您可以使用正则表达式检查输入的格式,然后使用适当的转换方法对其进行解析
  • 但是在你的程序中你需要一个 IP 地址,所以你可以使用 TryParse ,如果它返回 false 你需要让他们再次输入一个有效的 IP
【解决方案3】:

尝试正则表达式匹配 IP 地址:

     string userIP = Console.ReadLine();
     Match match = Regex.Match(userIP, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}");
     if (match.Success)
     {
         Console.WriteLine("Valid IP");
     }
     else
     { 
         Console.WriteLine("Invalid");  
     }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2013-08-22
    相关资源
    最近更新 更多