【问题标题】:C# dealing with invalid user inputC# 处理无效的用户输入
【发布时间】:2010-04-25 15:04:18
【问题描述】:

有一个简单的控制台应用程序,要求用户输入几个值。通过 console.readline() 读取输入。例

Name: Fred  //string
Lastname: Ashcloud //string
Age: 28 //int

我想确保输入 int 和 double 类型,如果用户输入垃圾,让他重复该过程。

例如,如果用户在期望年龄的地方输入“28 岁”,则应用将崩溃。检查这些输入的最佳方法是什么?

现在我只能想到:

while (!Int32.TryParse(text, out number))
{
    Console.WriteLine("Error write only numbers");
    text = Console.ReadLine();
}

还有其他方法可以做到这一点吗?如果想向用户提供更详细的反馈,请尝试使用 catch 语句?那怎么办?

【问题讨论】:

    标签: c# user-input


    【解决方案1】:

    对于控制台应用程序,您的代码非常好。

    但是,您可能希望将其抽象为一个可重用的函数,以便您可以读取不同的数字而无需重复代码。

    此外,您可能希望为用户提供某种取消方式。

    【讨论】:

    • 只是好奇,如果我决定稍后制作一个 gui,是否有更好的方法来做到这一点,或者是否会有一些额外的事情需要注意?谢谢。
    • GUI 完全 不同,并且可以使用内置的验证功能。
    • 您是否有一个链接或一些“搜索词”,我可以使用这些链接或一些“搜索词”来阅读更多关于 gui 的内置验证功能以供将来使用?谢谢
    【解决方案2】:
    using System.Text.RegularExpressions;
    
    int GetNumberFromString( string str_age )
    {
         Regex number = new Regex("[0-9][0-9]?");
         Match n = number.Match(str_age);
         if (n.Value != "")
             return System.Convert.ToInt16(n.Value, 10);
         else
             return -1;            
    }
    

    这将解析除年龄之外的任何数据,如果不存在年龄,则返回 -1。 这也假设 0-99 岁。

    【讨论】:

      【解决方案3】:

      实际上,您的代码很好。我会添加负数检查,也许还会添加大量数字检查。

      【讨论】:

        【解决方案4】:

        正则表达式很好。

        Regex age = new Regex(@"^[0-9]*$");
        while (!age.match(age_from_console)) {
            Console.WriteLine("Age Invalid, try again ->");
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多