Неизвестная ошибка при вводе - 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, ""));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д