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.
更改代码以处理用户输入的字符串无法正确解析为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,并显示错误消息。