下面的代码。 我正在编写一个菜单,其中用户键入一个数字以选择菜单选项。它也包含在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();
}
答案 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(),因此一个简单的输入错误不会导致程序崩溃。