【问题标题】:How to validate user input to only allow numbers如何验证用户输入只允许数字
【发布时间】:2019-04-09 20:17:15
【问题描述】:

我这里有一个方法,允许用户输入除 999 之外的任何数字。但我不知道当用户输入负数或字母时如何创建验证。

    static int EnterScores(double[] scores, int maxScores)
    {
        double userInput;           
        int count = 0;
        while (count < maxScores)
        {
            Console.Write("Enter a score(or 999 to quit): ");
            userInput = double.Parse(Console.ReadLine());
            if (userInput == 999 || userInput < 0)
                break;
            scores[count++] = userInput;       
        }
        return count;
    }

【问题讨论】:

  • 您已经收到了userInput &lt; 0 的支票。你有什么问题?
  • 对不起,我应该说为用户输入负数或字母时创建错误消息
  • maxScores 大于数组的长度时,您将获得索引超出范围异常。用户可以输入1000 或更大但999 结束它,这似乎也是任意的。
  • 请参阅stackoverflow.com/questions/7607260/… 了解如何检查非数字字符。一旦你有一个没有非数字字符的字符串,你可以检查

标签: c#


【解决方案1】:

您可以使用double.TryParse。如果它可以将字符串转换为浮点数 - 它将是true

...
var str = Console.ReadLine();
if (double.TryParse(str, out userInput)){
    if (userInput == 999 || userInput < 0)
        break;
    scores[count++] = userInput;
}
...

【讨论】:

  • 我以前试过。问题是 Console.Write("Enter a score(or 999 to quit): ");必须连续阅读。使用代码,您链接我必须按 enter 输入。
  • @SH093 尝试将else 添加到此if。喜欢if (double.TryParse(...)) { ... } else { break; }
  • 好的,解决了第一个问题。每当我输入字母时,我的主要问题仍然是给我一个错误。
【解决方案2】:

如果用户输入了一个字母或其他无法转换为double 的内容,您的这段代码double.TryParse 将抛出exception 并且程序将失败。

所以你应该在这里使用try-catch 块:


try
{
    userInput = double.Parse(Console.ReadLine());
    if (userInput == 999)
    {
        break;
    }
    else if (userInput < 0)
    {
        Console.WriteLine("Invalid input");
    } 
    else
    {
        scores[count++] = userInput;
    }
}
catch(Exception e)  // will take care of letters
{
    Console.WriteLine("You enter an Invalid input !"):
}

【讨论】:

  • catch语句中,“Exception e”是如何处理字母的?
  • 只需输入此代码并输入一个字母,您就会看到它是如何处理字母的
  • e 实际上并不是必需的,因为您没有使用它。只需 catch (Exception) { } 即可。
  • @Blorgbeard 这是必需的...否则会抛出错误&lt;identifier&gt; expected
  • 其实你甚至不需要Exception,你可以用catch { }来捕获所有的异常。
【解决方案3】:

userInput == 999 和userInput

...
if (userInput == 999)
{
    break;
}
else if (userInput < 0)
{
    Console.WriteLine("Invalid input");
} 
else
{
    scores[count++] = userInput;
}
...

【讨论】:

  • 这行得通,但是信函验证呢?
  • 在这种情况下,请按照@vic_78 在他的回答中的建议使用double.TryParse。如果结果为false,则表示输入不是可以转换为double的值,此时可以显示“invalid input”错误信息。
猜你喜欢
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 2017-06-08
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 2016-10-07
相关资源
最近更新 更多