Если вы ошиблись, задайте вопрос еще раз, пока он не станет правильным - PullRequest
0 голосов
/ 09 апреля 2020

Пожалуйста, смотрите мой код ниже.

Console.WriteLine("Enter a number between 1 and 5");
string _numberInt = Console.ReadLine();
Convert.ToInt32(_numberInt);

if (_numberInt != "1, 5")
{
    throw new System.ArgumentException("Please use a number between 1-5.");
}

Я пытаюсь сделать код таким образом, чтобы, если пользователь не введет число от 1 до 5, он выдал исключение. Затем я хочу, чтобы он вернул go и задал вопрос еще раз, пока он не станет правильным.

В этом текущем случае он просто пропустит это, и консоль закроется, а также игнорирует остальную часть моего кода. , Пожалуйста, кто-нибудь может помочь мне понять, что мне нужно делать здесь?

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

Ответы [ 4 ]

1 голос
/ 09 апреля 2020

Вам нужно использовать операторы >= и <= для проверки ввода после того, как вы попытались преобразовать его из строки в число:

while(true)
{
    Console.WriteLine("Enter a number between 1 and 5");
    var input = Console.ReadLine();

    if(int.TryParse(input, out var value) && value >= 1 && value <= 5)
    {
        Console.WriteLine("Thanks");
        break;
    }
    else
    {
        Console.WriteLine("invalid input")
    }
}

Обратите внимание, что вы никогда не должны использовать исключения как своего рода дешевый контроль потока. Они предназначены для сообщения об исключительных ситуациях, которые вы обычно не можете исправить. В вашей программе недопустимое значение не является исключением, это норма, и вы должны обращаться с ней соответствующим образом.

0 голосов
/ 09 апреля 2020
int uservalue;
for(;;) // what kind of loop you use doesn't really matter
{
    Console.WriteLine("Enter a number between 1 and 5");
    // use TryParse to validate and convert user input.
    // "continue" immediatly goes back to start of loop (= next iteration)
    if( !int.TryParse(Console.ReadLine(), out uservalue)) continue;
    // check for correct value range
    if(5 >= uservalue && uservalue >= 1) break;
}
Console.WriteLine("You entered {0}", uservalue);
0 голосов
/ 09 апреля 2020

Я думаю, что это должно делать то, что вам нужно. Это не исключение, хотя. Это не нужно, не так ли?

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = Ask();
            while (!(int.TryParse(input, out int result) && IsBetween1And5(result)))
            {
                input = Ask();
            }
            Console.WriteLine($"Thanks for entering {input}!");
        }

        private static bool IsBetween1And5(int value)
        {
            return value <= 5 && value >= 1;
        }

        private static string Ask()
        {
            Console.WriteLine("Enter a number between 1 and 5");
            return Console.ReadLine();
        }
    }
}
0 голосов
/ 09 апреля 2020

Вам нужно while l oop, чтобы многократно проверять и заставлять пользователя вводить число, пока не будет выполнено условие. Это то, что вы хотите:

while (true) {
    Console.WriteLine("Enter a number between 1 and 5 > ");
    int _numberInt = Convert.ToInt32(Console.ReadLine());

    if (_numberInt <= 5 && _numberInt >= 1) { // Check if number is between 1 and 5
        break; // Number is between 1 and 5. Break.
    }
    else { // Number is not between 1 and 5
        throw new System.ArgumentException("Please use a number between 1-5.");
    }
}

Также обратите внимание, что создание необработанного исключения приведет к завершению программы, поэтому вы можете просто сообщить пользователю Console.WriteLine(), что он не ввел действительное число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...