1

以下に含まれるコード。ユーザーがメニューオプションを選択するために数字を入力するメニューをコーディングしています。また、while ループで囲まれているため、ユーザーはメニューを何度も繰り返すことができます。最初のループスルーでは完全に機能しますが、2番目のループでは「入力文字列が正しい形式ではありませんでした」と表示されます。Console.ReadLine() で

static void Main(string[] args)
    {
        bool again = true;
        while (again)
        {

            string yourName = "Someone";

            Console.WriteLine("\t1: Basic Hello, World.\n" +
                "\t2: Calculate demoninations for a given value of change.\n" +
                "\t3: Calculate properties of shapes.\n" +
                "Please Select an Option: ");
            int option = int.Parse(Console.ReadLine());//errors out here.
            switch (option)
            {

            }
            Console.Write("Press y to back to the main menu.  Press any other key to quit: ");
            char againChoice = (char)Console.Read();
            if (againChoice == 'y')
            { again = true; }
            else
            { again = false; }
        }
        Console.Write("Hit Enter to end");
        Console.Read();
    }
4

2 に答える 2

1
    int option = int.Parse(Console.ReadLine());

デバッグ可能なコードを書くことに集中してください:

    string input = Console.ReadLine();
    int option = int.Parse(input);

これで、デバッガーを使用して、Parse() ステートメントにブレークポイントを設定できます。また、Parse() メソッドが例外をスローした理由も簡単にわかります。はい、空の文字列は好きではありません。これで、コード内のバグを見つけることができました。Console.Read() を完了するには Enter キーを押す必要がありましたが、1 文字しか返されませんでした。Enter キーはまだ処理されていないため、次の読み取り呼び出しで取得できます。カブーム。

代わりに Console.ReadKey() を使用して先に進みます。また、 int.TryParse() を使用して、単純な入力ミスでプログラムがクラッシュしないようにします。

于 2015-05-30T18:29:32.633 に答える