2016-05-02 8 views
-1

領域の入力を取得するとSystem.FormatExceptionが発生します。できるだけ早く解決策を教えてください。System.FormatException文字列からのInt32の場合

 double price; 
     int region; 
     string p; 
     Console.Write("Enter the total price of items : "); 
     price= Console.Read(); 
     Console.WriteLine("Select the your region."); 
     Console.WriteLine("1 : Pakistan"); 
     Console.WriteLine("2 : UK"); 
     Console.WriteLine("3 : Cortia"); 
     p= Console.ReadLine(); 
     region = Convert.ToInt32(p); 
+0

は、あなたが不正な形式のテキストを入力している - 彼のタイプ価格で1.50を読み取りは、()のみ1を取る場合は、数値を入力していない – pm100

+0

デバッガのpを検査、それは例外 –

+0

の理由だと.50にpを代入し、小数点がこのエラーの原因になります –

答えて

3

あなたの価格はdouble型ですが、あなたはそれが倍に変換し、文字列としてコンソール入力から値を代入しようとした変換中にすべての例外をキャッチすること、また、変換のためTryParseを使用し、問題を解決します。

+0

なぜ形式の例外が修正されますか? Console.Readは暗黙的に倍精度に変換されたIntを返します – pm100

+0

私の更新されたポストを参照してください – Mostafiz

+0

それはformatexcpetionで失敗するconvert.int32です – pm100

2

TryParseを使用すると、入力をint値に変換することができるかどうかを確認することができます。

TryParseを価格で使用することもできます。

 double price; 
     int region; 
     string p; 
     Console.Write("Enter the total price of items : "); 
     price = Convert.ToDouble(Console.ReadLine()); 
     Console.WriteLine("Select the your region."); 
     Console.WriteLine("1 : Pakistan"); 
     Console.WriteLine("2 : UK"); 
     Console.WriteLine("3 : Cortia"); 
     p = Console.ReadLine(); 

     if (!int.TryParse(p, out region)) 
     { 
      //error handle. 
     } 
     else 
     { 
       //at this point, the region value already has the value of p; 
     } 
関連する問題