2010-04-25 89 views
3

有一个简单的控制台应用程序,用户被要求输入多个值。输入通过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(); 
} 

是否有任何其他方式做到这一点?如果想给用户提供更详细的反馈,请尝试发表声明。在那种情况下如何?

回答

2

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

但是,您可能想将其抽象为可重用的函数,以便您可以在不重复代码的情况下读取不同的数字。

此外,您可能想要提供某种方式让用户取消。

+0

只是好奇,如果我以后决定做一个gui,会不会有更好的方法来做到这一点,还是会有一些额外的事情需要注意?谢谢。 – Milan 2010-04-25 15:10:57

+0

GUI完全不同,可以使用内置的验证功能。 – SLaks 2010-04-25 15:12:46

+0

您是否有链接或一些“搜索条件”,我可以使用它来阅读更多关于gui的内置验证功能以供将来使用?谢谢 – Milan 2010-04-25 15:16:37

1
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。

1

正则表达式很好。

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

其实你的代码是好的。我会添加负数检查,也可能是巨大的数字检查。