C#如何循环用户输入,直到输入的数据类型正确?

时间:2011-02-14 20:13:52

标签: c# loops input console

如何让这段代码循环询问用户的输入,直到 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;
        }
    }

4 个答案:

答案 0 :(得分:8)

while (!int.TryParse(Console.ReadLine(), out mynum))
    Console.WriteLine("Try again");

编辑:

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,甚至有些人可能会跟踪我,因为它会给我打鱼。

答案 1 :(得分:4)

即使问题已经标记为已回答,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));

答案 2 :(得分:2)

这也可以帮助

public int fun()
{
    int Choice=0;
    try 
    {
        Choice = int.Parse(Console.ReadLine());
        return choice;
    } 
    catch (Exception) 
    {
        return fun(); 
    }
}

答案 3 :(得分:1)

我一直在想很多,但我只想出来了!

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

此代码将循环,直到用户输入整数。这样,程序不会简单地报告错误,而是立即允许用户再次输入另一个正确的值。