循环输入请求,直到接受有效数字

时间:2012-10-27 09:05:44

标签: c# loops request

此代码只是抛出异常,因为短sNum被赋予int num的大范围值,并且转换失败。无论如何。 我想循环请求,直到输入有效的rang为止。

    static void Main()
    {
        int num = 40000;
        short sNum = 0;
        try
        {
            sNum = Convert.ToInt16(num);

        }
        catch (OverflowException ex)
        {
            // Request for input until no exception thrown.
            Console.WriteLine(ex.Message);
            sNum = Convert.ToInt16(Console.ReadLine());
        }

        Console.WriteLine("output is {0}",sNum);
                        Console.ReadLine();
    }

谢谢。

2 个答案:

答案 0 :(得分:5)

原因是您在catch块内转换失败时抛出异常。 catch块在技术上位于try块之外,因此它不会被您认为的catch所捕获。这并不像你希望的那样表现为循环。

异常通常不被视为代码中正常(非异常)事件的最佳方法。在这种情况下,TryParse方法和循环会好得多。

static void Main()
{
    string input = //get your user input;
    short sNum = 0;

    while(!short.TryParse(input,out sNum))
    {
        Console.WriteLine("Input invalid, please try again");
        input = //get your user input;
    }

    Console.WriteLine("output is {0}",sNum);
    Console.ReadLine();
}

答案 1 :(得分:0)

short sNum;
string input;

do
{
    input = Console.ReadLine();
} while (!Int16.TryParse(input, out sNum))

Console.WriteLine("output is {0}", sNum);