Получение "Входная строка была в неправильном формате." на втором шаге через цикл
Код прилагается ниже. Я кодирую меню, где пользователь набирает номер, чтобы выбрать пункт меню. Он также заключен в цикл while, поэтому пользователь может повторять меню снова и снова. Он отлично работает на первом цикле через, но на втором он дает "Входная строка была в неправильном формате". на 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 ответа
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(), чтобы простая ошибка ввода не привела к краху вашей программы.
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";