C#运行时错误

本文关键字:运行时错误 | 更新日期: 2023-09-27 18:28:40

谁能告诉我这个程序为什么会出现运行时错误:

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.

C#运行时错误

更改代码以处理用户输入的字符串无法正确解析为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();

之后:

Console.ReadLine().Trim() 

您有"1 2"res值,这肯定不是正确的。

在正常情况下,您的代码可以正常工作,但如果您键入除数字之外的内容,则会因为将string转换为long而导致运行时错误。

您可以使用TryParse()方法而不是Parse():

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

编辑后:Parse()方法无法将"12"转换为long,它在数字之间包含space

        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,并显示错误消息。