[ad_1]
System.FormatException: Input string was not in a correct format
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("hello"); Console.WriteLine("enter the character"); int c = Console.Read(); Console.WriteLine(c); Console.WriteLine("please enter first integer"); int p1 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("second"); int p2 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(p1 + p2); } } }
しかし、以下のようにコードを単純にコメントすると、正常に動作します。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //Console.WriteLine("hello"); //Console.WriteLine("enter the character"); //int c = Console.Read(); //Console.WriteLine(c); Console.WriteLine("please enter first integer"); int p1 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("second"); int p2 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(p1 + p2); } } }
理由を教えてください。
ありがとう
私が試したこと:
int p1 = Convert.ToInt32(Console.ReadLine().Trim());
しかし、同じエラーも表示されます。
解決策 1
文字を入力し、それを int として読み取っています。 それが問題なのです。 修正してください。
解決策 2
コードの問題ではありません。 問題は、このコード行に入力しようとしている入力にあります。 コンソールに入力した内容は、整数に変換できません。
代わりに Int32.TryParse() を調べてみることをお勧めします。 まずはドキュメントを読んでください。
解決策 3
解決策 1 と 2 に加えて、次のことを行います。
クラスを使用しないでください Convert
本当に必要ないとき。 これは「変換」ではありません。 これは 解析する。 あなたの場合、まさにそれを行うメソッドを使用する方が良いでしょう。 int.Parse
あるいは、例外をスローしないメソッドの方が良いでしょう。 int.TryParse
:
解決策 4
コードをコピーしてテストしました。
を入力したにもかかわらず、 integer
同じように与えていた値 format exception
..
考慮する 解決策 1、2、3 に関する情報については 整数値の解析
問題は、あなたが使用していることです Console.Read()
方法
引用:Read メソッドは、入力文字を入力している間、その戻りをブロックします。 Enter キーを押すと終了します。 Enter キーを押すと、プラットフォームに依存する行終了シーケンスが入力に追加されます (たとえば、Windows ではキャリッジ リターンとラインフィードのシーケンスが追加されます)。 後続の Read メソッドの呼び出しでは、一度に 1 文字ずつ入力を取得します。 最後の文字が取得されると、Read はその戻りを再度ブロックし、サイクルが繰り返されます。
参照する Console.Read メソッド (システム)[^]
以下のコードでこれをデバッグしてみてください
class Program { static void Main(string[] args) { Console.WriteLine("hello"); Console.WriteLine("enter the character"); int c = Console.Read(); Console.WriteLine(c); Console.WriteLine("please enter first integer"); string p1str = Console.ReadLine(); // this will be ignored if you use Console.Read() int p1 = Convert.ToInt32(p1str); Console.WriteLine("second"); string p2str = Console.ReadLine(); int p2 = Convert.ToInt32(p2str); Console.WriteLine(p1 + p2); } }
の Console.Read()
その行の最後の char 値を割り当てます。
そしてすぐに Console.ReadLine()
ユーザー入力からは無視され、画面にすでに入力されている値が割り当てられます。
例えば:
「」と入力するとa1
” そうして p1str
値を保持します “1
” 最初の文字を無視することで
「」と入力すると123
” そうして p1str
値を保持します “23
” これは例外なく整数に解析できます。
「」と入力すると1[pressed enter key]
” それから p1str
値 “” (空または return key ) が保持され、結果は次のようになります。 format exception
..
ブレークポイントとデバッガを適用して、それがどのように機能するかを確認していただければ幸いです。
解決策 5
Console.WriteLine("hello"); Console.WriteLine("enter the character"); int c = Console.Read(); Console.WriteLine(c); Console.ReadLine(); //this work fine Console.WriteLine("please enter first integer"); int p1 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("second"); int p2 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(p1 + p2); }
[ad_2]
コメント