как сделать пользовательский ввод Int NULL значение C # - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь создать программу, которая берет число и печатает его на экране, но если пользователь нажимает ввести код, попросите пользователя ввести номер еще раз, но вместо этого он показывает исключение

Enter_No:
                 Console.WriteLine("enter number");
                 int? n = Convert.ToInt32(Console.ReadLine());
                 if (n == (int?)null)
                 {
                     goto Enter_No;
                 }
                 else
                 {
                     Console.WriteLine(n);
                 } 

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Решение Тима удивительно компактно.Вот почему ваша попытка не удалась.

Из MSDN , Convert.ToInt32 () генерирует исключение FormatException, если:

значение не состоит из необязательного знака, за которым следуетпоследовательность цифр (от 0 до 9).

Предпочтительным подходом является int.TryParse(), так как он возвращает false, если не может проанализировать целое число, а не выдает исключение.

В то время как ключевое слово goto поддерживается в C #, существует несколько ситуаций (или в зависимости от того, кого вы спрашиваете), где это лучший вариант для управления потоком.while петля Тима - превосходный подход.

0 голосов
/ 17 октября 2018

Во-первых, не используйте Go To:

Во-вторых: проверьте ваши данные и используйте tryparse:

        bool success = false;
        do
        {
            Console.WriteLine("enter number");
            var n = Console.ReadLine();
            if (n == null)
            {
                // goto Enter_No;
            }
            else
            {
                int typedNum;
                success = int.TryParse(n, out typedNum);
                Console.WriteLine(typedNum);                    
            }
        } while (!success);
0 голосов
/ 17 октября 2018

Использование int.TryParse:

int? num = null;
while(!num.HasValue)
{
    Console.WriteLine("Please enter an integer:");
    num = int.TryParse(Console.ReadLine(), out int i) ? i : new int?();
}

Console.WriteLine("Entered integer: " + num.Value);
...