获取"输入字符串的格式不正确。"在第二步通过循环

时间:2015-05-30 17:57:14

标签: c# console.readline

下面的代码。 我正在编写一个菜单,其中用户键入一个数字以选择菜单选项。它也包含在while循环中,因此用户可以反复重复菜单。 它在第一个循环中完美地工作,但在第二个循环中,它给出了#34;输入字符串的格式不正确。"在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();
    }

2 个答案:

答案 0 :(得分:1)

当您不确定用户输入的输入值时,

int.TryParse是比int.Parse更好的方法

int option;
if(int.TryParse(Console.ReadLine(), out option))
{
  switch (option)
  {

  }
}
Console.Write("Press y to back to the main menu.  Press any other key to quit: ");
char againChoice = (char)Console.Read();
// also add read line to capture enter key press after press any key
Console.ReadLine();

或将后面的菜单代码更改为

string againChoice = Console.ReadLine();
again =againChoice == "y";

答案 1 :(得分:1)

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

专注于编写可调试代码:

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

现在您可以使用调试器,在Parse()语句中设置断点。你很容易理解为什么Parse()方法引发了一个异常。是的,它不喜欢空字符串。现在您可以在代码中找到错误,Console.Read()要求您按Enter键完成但只返回单个字符。 Enter键仍未处理,您将在下一次读取调用时获取它。 KABOOM。

使用Console.ReadKey()取而代之。并使用int.TryParse(),因此一个简单的输入错误不会导致程序崩溃。