处理无效用户输入的C#
问题描述:
有一个简单的控制台应用程序,用户被要求输入多个值。输入通过console.readline()读取。防爆处理无效用户输入的C#
Name: Fred //string
Lastname: Ashcloud //string
Age: 28 //int
我想确保int和double类型输入,如果用户输入的是垃圾,让他重复上述步骤。
例如,如果用户输入年龄为“int”的“28岁”,则应用程序将崩溃。检查这些输入的最佳方法是什么?
现在我只能想:
while (!Int32.TryParse(text, out number))
{
Console.WriteLine("Error write only numbers");
text = Console.ReadLine();
}
是否有任何其他方式做到这一点?如果想给用户提供更详细的反馈,请尝试发表声明。在那种情况下如何?
答
对于控制台应用程序,您的代码非常好。
但是,您可能想将其抽象为可重用的函数,以便您可以在不重复代码的情况下读取不同的数字。
此外,您可能想要提供某种方式让用户取消。
答
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。
答
正则表达式很好。
Regex age = new Regex(@"^[0-9]*$");
while (!age.match(age_from_console)) {
Console.WriteLine("Age Invalid, try again ->");
}
答
其实你的代码是好的。我会添加负数检查,也可能是巨大的数字检查。
只是好奇,如果我以后决定做一个gui,会不会有更好的方法来做到这一点,还是会有一些额外的事情需要注意?谢谢。 – Milan 2010-04-25 15:10:57
GUI完全不同,可以使用内置的验证功能。 – SLaks 2010-04-25 15:12:46
您是否有链接或一些“搜索条件”,我可以使用它来阅读更多关于gui的内置验证功能以供将来使用?谢谢 – Milan 2010-04-25 15:16:37