Неизвестная ошибка при вводе - C#

Узнай цену своей работы

Формулировка задачи:

Решил попрактиковаться и написать небольшую игрулю в консоли. Ниже приведен метод, описывающий торговлю между игроком и неигровым персонажем. Главное меню торговли работает как нужно, но выбор элементов хромает - при вводе числа каретка возвращается в начало строки, а число остаётся. При повторном вводе, как бы то странно ни было, как повезет: либо программа продолжает работать, но берет предыдущее значение, если меню открывается второй или третий раз, либо просто выдаёт FormatException. Уже попробовал пихать в try catch и использовать int.Parse() - результаты не сильно отличаются. Если будет необходимо, могу скинуть весь код целиком.
Листинг программы
  1. public static void Trade(Person Seller, Person Buyer)
  2. {
  3. ConsoleKeyInfo answer;
  4. int ans;
  5. do
  6. {
  7. Console.Clear();
  8. Console.WriteLine("<1> Buy\n<2> Sell\n<Esc> Quit");
  9. answer = Console.ReadKey();
  10. switch (answer.KeyChar)
  11. {
  12. case '1':
  13. Console.WriteLine("\nChose an item to buy:");
  14. for (int i = 0; i < Seller.NumberOfItems; i++)
  15. Console.WriteLine("<" + i + ">" + " " + Seller.Bag[i].name + "\t"
  16. + Seller.Bag[i].Cost + " gold");
  17. Console.Write("\n\n");
  18. ans = Convert.ToInt32(Console.ReadLine()); // Исключение FormatException
  19. if (Buyer.Gold >= Seller.Bag[ans].Cost)
  20. {
  21. if (FillTheBag(Buyer,
  22. Seller.Bag[ans]))
  23. {
  24. Buyer.Gold -= Seller.Bag[ans].Cost;
  25. Seller.Gold += Seller.Bag[ans].Cost;
  26. Console.WriteLine("You just bought " + Seller.Bag[ans].name + "\nPress any key");
  27. Seller.Bag[ans] = new Equipment();
  28. Console.ReadKey();
  29. }
  30. }
  31. else Console.WriteLine("Not enough gold"); break;
  32. case '2':
  33. Console.WriteLine("\nChose an item to sell:");
  34. for (int i = 0; i < Buyer.NumberOfItems; i++)
  35. Console.WriteLine("<" + i + ">" + " " + Buyer.Bag[i].name + "\t"
  36. + Buyer.Bag[i].Cost + " gold");
  37. Console.Write("\n\n");
  38. ans = Convert.ToInt32(Console.ReadLine()); // Исключение FormatException
  39. if (Seller.Gold > Buyer.Bag[ans].Cost)
  40. {
  41. if (FillTheBag(Seller,
  42. Buyer.Bag[ans]))
  43. {
  44. Seller.Gold -= Buyer.Bag[ans].Cost;
  45. Buyer.Gold += Seller.Bag[ans].Cost;
  46. Console.WriteLine("You just sold " + Buyer.Bag[ans].name + "\nPress any key");
  47. Buyer.Bag[ans] = new Equipment();
  48. Console.ReadKey();
  49. }
  50. }
  51. else Console.WriteLine("Seller has not enough gold");
  52. break;
  53. default: break;
  54. }
  55. }
  56. while (answer.Key != ConsoleKey.Escape);
  57. }

Решение задачи: «Неизвестная ошибка при вводе»

textual
Листинг программы
  1. ans = Convert.ToInt32(Console.ReadLine().Replace(System.Environment.NewLine, ""));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы