2014-10-31 85 views
-2

任何一個可以告訴我爲什麼這個節目是給運行時錯誤: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

+1

什麼是錯誤? – 2014-10-31 13:21:45

+2

究竟是什麼例外?例如,你的代碼中的'Int64.Parse(test)'會引發'FormatException',你會輸入字母而不是數字。 – 2014-10-31 13:23:14

+1

「輸入字符串的格式不正確」中的哪部分不明白? – 2014-10-31 13:24:05

回答

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(); 
0

後:

Console.ReadLine().Trim() 

你有res價值的"1 2"這是不正確的長期肯定。

0

在正常情況下,您的代碼將正常工作,但如果您鍵入數字除外,則會因爲將string轉換爲long而導致運行時錯誤。

可以使用的TryParse()方法,而不是解析():

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

您的編輯後: Parse()方法不能將 「1 2」 long,它包含數字之間space

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

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

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

這樣寫,你試圖解析爲不長的長字符串。因爲你有這個例外。如果你這樣寫,你首先檢查是否有可能,如果轉換成長是成功的,你的值寫在t中,如果不是,test返回false,你顯示錯誤信息。