2009-12-05 105 views
2

我在C#中设计了一个输入验证循环,我希望它能够检查正确的输入格式。我不确定,但我认为我设计的循环没有检查输入的类型,只是输入了什么字符。我知道我可以使用try-catch块,但是不应该只在特殊情况下使用异常吗?这不是一个特殊情况,因为我期望用户输入一个不正确的值。验证用户输入和类型

问:

有没有一种方式,以便它检查有效输入以及我可以重新设计这个循环?

代码:

do 
{ 
    Console.Write("Do you wish to enter another complex number?: (Y or N)"); 
    response = char.Parse(Console.ReadLine()); 
    response = char.ToUpper(response); 

    if (response != 'Y' && response != 'N') 
     Console.WriteLine("You must respond Y or N!"); 

} while (response != 'Y' && response != 'N'); 
+0

你是什么意思的“输入类型”?你接受一个较低/大写的Y或N并拒绝其他一切 - 你还以为你需要做更多的事情? – slugster 2009-12-05 22:48:30

+0

为什么随机downvote,这是他提出的解决方案有效的问题,他正在寻求建议。不要低估没有解释的人。 – ajdams 2010-03-26 13:25:27

回答

2

Console.Readline()

读取的字符从标准输入流的下一行。

因此,您的数据将是类型System.String

唯一的其他检查你可以做的是检查返回的字符串长度为1,所以你知道你有正确的格式输入。您并不需要char.Parse,因为字符串的元素类型为char

+0

谢谢!我没有考虑检查字符串的长度! – Alex 2009-12-05 22:50:26

0

在这种情况下另一个有用的检查

检查一个空字符串“”(空字符串),并修剪多余的空白IE弦乐这样“”成为这个“”

如果(String.IsNullOrEmpty(response.Trim()& &响应= 'Y' & &响应= 'N')!)
{ Console.WriteLine( “你必须响应Y或N!”); }

大多数情况下,在大多数简单的输入验证情况下,字符串比字符更容易使用。

1

我不知道你原来asigment是什么,但你所提供的例子可以仅通过比较字符串来simplyfied,即:

response = Console.ReadLine(); 
if (response.ToUpper() == "Y") {...} 

如果你想看到,如果输入可以是你需要(例如字符)的类型,你可以永诺(每一个值类型)做的事:

char input; 
bool IsValid = char.TryParse(Console.ReadLine().ToUpper(), out input); 
if (IsValid) 
{ 
    Console.WriteLine("You entered the following char: " + input); 
} 

希望这有助于。