Попробуйте/поймать в цикле for

Я новичок в программировании и пытаюсь решить проблему. У меня есть массив, который я хочу заполнить вводом от пользователя, но я хочу убедиться, что это только целые числа от 1 до 25 и нет ввода строки. Как мне это сделать?

Код, который я получил так далеко, таков:

for (int i = 0; i < lottery.Length; i++)
{
    Console.Write(i + ": ");

    try
    {
        input = int.Parse(Console.ReadLine());
        lottery[i] = input;
    }
    catch
    {
        Console.WriteLine("Only integers!");
        i--;
    }
}

Эти коды гарантируют, что единственным входом в массив являются целые числа, но как заставить пользователя записывать только числа от 1 до 25? Я пробовал разные операторы if и другие циклы 3 часа, но не могу их решить. Пожалуйста помоги.

Неправильно, не контролируйте код с помощью исключений. Вместо этого используйте TryParse и удалите исключение

Steve 21.12.2020 09:39

Я бы посоветовал посмотреть, что такое while look. По сути, в рамках одной итерации цикла for вы хотите продолжать запрашивать число, пока не будет предоставлено правильное целочисленное значение.

user10608418 21.12.2020 09:41
if (input>=1 && input<=25).........?
Franz Gleichmann 21.12.2020 09:41
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
3
3
135
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы не должны использовать исключения для управления своим кодом. Исключения дорого обходятся с точки зрения производительности, и если есть способ избежать их, вы всегда должны использовать этот способ.
В вашем случае вы должны использовать int32.TryParse вместо Parse. Этот TryParse не вызывает исключение, если входные данные не являются допустимым целым числом, но возвращает значение false или true, в то время как проанализированное число (если оно является целым числом) возвращается в параметре out, переданном методу.

Это позволяет писать гораздо более простой код с циклом while для продолжения ввода в случае ошибок.

        for (int i = 0; i < lottery.Length; i++)
        {
            Console.Write(i + ": ");

            // Start the loop with an invalid input
            int input = 0;
            while(input == 0)
            {
                if (int32.TryParse(Console.ReadLine(), out input);
                {
                    // Got a valid integer, add out acceptance logic here
                    if (input > 0 && input <= 25)
                        lottery[i] = input;
                    else
                    {
                        Console.WriteLine("Type a number between 1 and 25");

                        // Not a valid range. Force the loop to continue
                        input = 0;
                    }
                }
                else
                    Console.WriteLine("Write only integers between 1-25");
            }
        }
int[] lottery = new int[5];
        for (int i = 0; i < lottery.Length; i++)
        {
            Console.WriteLine(i + ": ");
            int input; 
            while(true)
            {
                string inp = Console.ReadLine();
                if (Int32.TryParse(inp, out input) == true)
                {
                    if (0 < input & input <= 25)
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Only numbers 1-25");
                    }
                }
                else
                {
                    Console.WriteLine("Only Integers");
                }
                    
            }
               
            lottery[i] = input;

            
        }

пожалуйста, включите описания в свой ответ - только код не так уж полезен.

Franz Gleichmann 21.12.2020 10:14

Другие вопросы по теме