C # Как зациклить пользовательский ввод, пока тип данных ввода не будет правильным? - PullRequest
0 голосов
/ 14 февраля 2011

Как заставить этот фрагмент кода запрашивать ввод у пользователя, пока int.TryParse ()

не будет успешным?

//setX
    public void setX()
    {
        //take the input from the user
        string temp;
        int temp2;
        System.Console.WriteLine("Enter a value for X:");
        temp = System.Console.ReadLine();
        if (int.TryParse(temp, out temp2))
            x = temp2;
        else
            System.Console.WriteLine("You must enter an integer type value"); 'need to make it ask user for another input if first one was of invalid type'
    }

Версиякод после полезного ответа:

 //setX
    public void setX()
    {
        //take the input from the user
        string temp;
        int temp2;
        System.Console.WriteLine("Enter a value for X:");
        temp = System.Console.ReadLine();
        if (int.TryParse(temp, out temp2))
            x = temp2;
        else
        {
            Console.WriteLine("The value must be of integer type");
            while (!int.TryParse(Console.ReadLine(), out temp2))
                Console.WriteLine("The value must be of integer type");
            x = temp2;
        }
    }

Ответы [ 3 ]

8 голосов
/ 14 февраля 2011
while (!int.TryParse(Console.ReadLine(), out mynum))
    Console.WriteLine("Try again");

edit:

public void setX() {
    Console.Write("Enter a value for X (int): ");
    while (!int.TryParse(Console.ReadLine(), out x))
        Console.Write("The value must be of integer type, try again: ");
}

Попробуйте это.Я лично предпочитаю использовать while, но do .. while также является допустимым решением.Дело в том, что я не хочу печатать сообщение об ошибке до какого-либо ввода.Однако while также имеет проблему с более сложным вводом, который нельзя поместить в одну строку.Это действительно зависит от того, что именно вам нужно.В некоторых случаях я бы даже рекомендовал использовать goto, хотя некоторые люди, вероятно, выследили бы меня и из-за этого ударили меня рыбой.

4 голосов
/ 14 февраля 2011

Несмотря на то, что вопрос уже помечен как ответ, петли do-while намного лучше подходят для проверки ввода пользователя.

Обратите внимание на ваш код:

Console.WriteLine("The value must be of integer type");
while (!int.TryParse(Console.ReadLine(), out temp2))
    Console.WriteLine("The value must be of integer type");

У вас тот же кодсверху и снизу.Это можно изменить:

do {
    Console.WriteLine("The value must be of integer type");
} while (!int.TryParse(Console.ReadLine(), out temp2));
1 голос
/ 26 ноября 2013

Мне было очень интересно, но я только что понял!

    int number;
    bool check;
    do
    {
        Console.WriteLine("Enter an integer:");
        check = int.TryParse(Console.ReadLine(), out num1);
    }
    while (!check);

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

...