C#运行时错误

时间:2014-10-31 13:19:23

标签: c#

任何人都可以告诉我为什么这个程序给出运行时错误:

Unhandled Exception: System.FormatException: Input string was not in the correct format
  at System.Int64.Parse (System.String s) [0x00000] in <filename unknown>:0 
  at Myclass.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.FormatException: Input string was not in the correct format
  at System.Int64.Parse (System.String s) [0x00000] in <filename unknown>:0 
  at Myclass.Main (System.String[] args) [0x00000] in <filename unknown>:0 

代码:

static void Main(string[] args)
{
    string test = Console.ReadLine().Trim();
    long t = Int64.Parse(test);
    while (t > 0)
    {
        t--;
        string res = Console.ReadLine().Trim();
        long n = Int64.Parse(res);
        Console.WriteLine(n);
        long ans = n * 8;
        if (n > 1)
            ans = ans + (n - 1) * 6;
        Console.WriteLine(ans);
        Console.WriteLine("\n");
    }
}

并输入:

2
1 2

请参阅http://ideone.com/beklvQ

4 个答案:

答案 0 :(得分:1)

更改代码以处理输入未正确解析为Int64的字符串的用户,并在发生错误时报告错误。

        var test = Console.ReadLine().Trim();
        long t;
        if (Int64.TryParse(test, out t))
        {
            while (t > 0)
            {
                t--;
                var res = Console.ReadLine().Trim();
                var n = Int64.Parse(res);
                Console.WriteLine(n);
                var ans = n*8;
                if (n > 1)
                {
                    ans = ans + (n - 1)*6;
                }
                Console.WriteLine(ans);
                Console.WriteLine("\n");
            }
        }
        else
        {
            Console.WriteLine("Invalid argument {0} entered.", test);
        }

        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();

答案 1 :(得分:0)

后:

Console.ReadLine().Trim() 

res值为"1 2",但肯定不是正确的。

答案 2 :(得分:0)

在正常情况下,您的代码可以正常工作,但如果您键入数字,则会因为string转换为long而产生运行时错误。

您可以使用TryParse()方法代替Parse():

long n;
if (Int64.TryParse(res, out n) )
    // Your proper action

编辑后: Parse()方法无法转换&#34; 1 2&#34;到long,它在数字之间包含space

答案 3 :(得分:0)

        long t = 0;
        bool test = Int64.TryParse(p, out t);

        if(!test)
        {
           Console.WriteLine("Wrong String format");
           return;
        }

        while (t > 0)
        {
            //do stuff
        }

像这样写,你试图解析为不长的长字符串。因为你有这个例外。如果您这样写,如果可以,则首先检查,如果转换为long成功,则您的值将写入t,如果不是test则返回false并且您显示错误消息。