【解決方法】System.formatException: 入力文字列が正しい形式ではありませんでした

[ad_1]

このコードはエラーを示しています

C#
System.FormatException: Input string was not in a correct format

C#
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);
          
        }
    }
}

しかし、以下のようにコードを単純にコメントすると、正常に動作します。

C#
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:

-SA

解決策 4

コードをコピーしてテストしました。
を入力したにもかかわらず、 integer 同じように与えていた値 format exception..
考慮する 解決策 1、2、3 に関する情報については 整数値の解析

問題は、あなたが使用していることです Console.Read() 方法

引用:

Read メソッドは、入力文字を入力している間、その戻りをブロックします。 Enter キーを押すと終了します。 Enter キーを押すと、プラットフォームに依存する行終了シーケンスが入力に追加されます (たとえば、Windows ではキャリッジ リターンとラインフィードのシーケンスが追加されます)。 後続の Read メソッドの呼び出しでは、一度に 1 文字ずつ入力を取得します。 最後の文字が取得されると、Read はその戻りを再度ブロックし、サイクルが繰り返されます。

参照する Console.Read メソッド (システム)[^]

以下のコードでこれをデバッグしてみてください

C#
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]

コメント

タイトルとURLをコピーしました