Неизвестная ошибка при вводе - 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, ""));

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


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

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

15   голосов , оценка 3.733 из 5
Похожие ответы