【问题标题】:loop input request until valid number accepted循环输入请求,直到接受有效数字
【发布时间】:2012-10-27 09:05:43
【问题描述】:

这段代码只是简单的抛出异常,因为short sNum被赋值为int num的大范围值,转换失败。反正。 我想循环请求,直到输入有效的短路范围。

    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();
    }

谢谢。

【问题讨论】:

标签: c# loops request


【解决方案1】:

原因是当您的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();
}

【讨论】:

    【解决方案2】:
    short sNum;
    string input;
    
    do
    {
        input = Console.ReadLine();
    } while (!Int16.TryParse(input, out sNum))
    
    Console.WriteLine("output is {0}", sNum);
    

    【讨论】:

      猜你喜欢
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 2014-08-27
      • 2018-07-15
      • 2015-12-09
      • 2013-09-06
      • 2016-05-04
      • 2017-11-30
      相关资源
      最近更新 更多