Простое меню в консоли с попробовать и поймать - PullRequest
0 голосов
/ 11 июля 2019

Я во всем разбираюсь, как создать простое меню, которое отображает число, которое пользователь имел в качестве ввода.Кроме того, я хотел бы поймать любые нечисловые входы и написать сообщение об ошибке.Еще я хотел бы, чтобы консоль выходила только тогда, когда пользователь нажимает какую-либо клавишу, после отображения вывода.

В моем сценарии ошибок нет, но консоль просто закрывается.Я попытался использовать Console.Read();, но это не помешало ему выйти.

Вот мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MenuTest2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Choose an option:");
            Console.WriteLine(" 1. Write Hello");
            Console.WriteLine(" 2. Write jacob");
            int choice = Console.Read();
            try
            {
                switch (choice)
                {
                    case 1:
                        Console.WriteLine("Case 1");
                        Console.ReadLine();
                        break;
                    case 2:
                        Console.WriteLine("Case 2");
                        break;
                    default:
                        Console.WriteLine("Null");
                        break;
                }
            }
            catch (FormatException)
            {
                Console.WriteLine("{0} is not an integer", choice);
            }
            finally
            {
                Console.WriteLine("Press enter to close...");
                Console.ReadLine();
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Console Read получает один символ из вашего входного потока и возвращает эквивалент int32. По этой причине я бы не ожидал, что будет брошено исключение. Как предлагали другие ответы, используйте функцию ReadLine(), так как это улучшит обработку

string userInput = Console.ReadLine(); 
if (int.TryParse(userInput, out int choice)) 
{
    switch(choice)
    {
        //etc
    }

}
else 
{
    Console.WriteLine("Invalid - Choice not a numeric response");
}
0 голосов
/ 11 июля 2019

Я предлагаю вам использовать ReadLine() вместо Read() при выборе choice. Затем преобразуйте это в int, используя Convert.ToInt32(choice), и поймайте это в своей попытке try.

...