Неизвестная ошибка при вводе - C#
Формулировка задачи:
Решил попрактиковаться и написать небольшую игрулю в консоли. Ниже приведен метод, описывающий торговлю между игроком и неигровым персонажем. Главное меню торговли работает как нужно, но выбор элементов хромает - при вводе числа каретка возвращается в начало строки, а число остаётся. При повторном вводе, как бы то странно ни было, как повезет: либо программа продолжает работать, но берет предыдущее значение, если меню открывается второй или третий раз, либо просто выдаёт FormatException. Уже попробовал пихать в try catch и использовать int.Parse() - результаты не сильно отличаются.
Если будет необходимо, могу скинуть весь код целиком.
public static void Trade(Person Seller, Person Buyer) { ConsoleKeyInfo answer; int ans; do { Console.Clear(); Console.WriteLine("<1> Buy\n<2> Sell\n<Esc> Quit"); answer = Console.ReadKey(); switch (answer.KeyChar) { case '1': Console.WriteLine("\nChose an item to buy:"); for (int i = 0; i < Seller.NumberOfItems; i++) Console.WriteLine("<" + i + ">" + " " + Seller.Bag[i].name + "\t" + Seller.Bag[i].Cost + " gold"); Console.Write("\n\n"); ans = Convert.ToInt32(Console.ReadLine()); // Исключение FormatException if (Buyer.Gold >= Seller.Bag[ans].Cost) { if (FillTheBag(Buyer, Seller.Bag[ans])) { Buyer.Gold -= Seller.Bag[ans].Cost; Seller.Gold += Seller.Bag[ans].Cost; Console.WriteLine("You just bought " + Seller.Bag[ans].name + "\nPress any key"); Seller.Bag[ans] = new Equipment(); Console.ReadKey(); } } else Console.WriteLine("Not enough gold"); break; case '2': Console.WriteLine("\nChose an item to sell:"); for (int i = 0; i < Buyer.NumberOfItems; i++) Console.WriteLine("<" + i + ">" + " " + Buyer.Bag[i].name + "\t" + Buyer.Bag[i].Cost + " gold"); Console.Write("\n\n"); ans = Convert.ToInt32(Console.ReadLine()); // Исключение FormatException if (Seller.Gold > Buyer.Bag[ans].Cost) { if (FillTheBag(Seller, Buyer.Bag[ans])) { Seller.Gold -= Buyer.Bag[ans].Cost; Buyer.Gold += Seller.Bag[ans].Cost; Console.WriteLine("You just sold " + Buyer.Bag[ans].name + "\nPress any key"); Buyer.Bag[ans] = new Equipment(); Console.ReadKey(); } } else Console.WriteLine("Seller has not enough gold"); break; default: break; } } while (answer.Key != ConsoleKey.Escape); }
Решение задачи: «Неизвестная ошибка при вводе»
textual
Листинг программы
ans = Convert.ToInt32(Console.ReadLine().Replace(System.Environment.NewLine, ""));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д