2009-12-05 73 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); 
} 

希望這有助於。