任何人都可以告诉我为什么这个程序给出运行时错误:
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
答案 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并且您显示错误消息。