代碼非常簡單,但不確定到底發生了什么。任何幫助深表感謝。
我正在呼叫驗證函式來檢查用戶是否在 Main 方法中輸入了“c”或“r”,如下所示:
validation.ValidateInputChars(input, 'c', 'r');
而 validateInputChars 函式是這樣的:
public char ValidateInputChars(char actualInput, char input1, char input2)
{
if (char.Equals(actualInput, input1))
{
return 'c';
}
else if (char.Equals(actualInput, input2))
{
return 'r';
}
else
{
Console.WriteLine("\n You pressed " actualInput "\nYour input is incorrect, kindly press " input1 " or " input2 " to proceed");
actualInput = Console.ReadKey().KeyChar;
ValidateInputChars(actualInput, input1, input2);
return 'z';
}
}
輸入是讓我們假設:'q'、'w'、'e' 然后是 'c'。
一切正常,直到我按“c”。它進入第一個回圈以回傳正確的輸入“c”,但奇怪的是它也進入了 else 回圈,在那里它又回傳了 4 次 'z'。
最后它回傳的結果是第二個輸入,所以在這種情況下它最終回傳'w'(WTH!)。
我試過不使用 if else 陳述句,使用 List {'c', 'r'},一切。
我唯一需要知道的是用戶是否輸入了“c”或“r”,但它不起作用。
知道這里發生了什么嗎?
uj5u.com熱心網友回復:
似乎您想一次又一次地詢問用戶,直到提供正確的字符。如果這是你的情況,那么你應該把
// validate actualInput again, return a valid choice
return ValidateInputChars(actualInput, input1, input2);
代替
// Validate, ignore valid choice and...
ValidateInputChars(actualInput, input1, input2);
// ...return 'z' (!)
return 'z';
并且,請避免使用魔術常量,例如'c','r':
if (char.Equals(actualInput, input1))
{
return input1; // there's no guarantee, that input1 == 'c'
}
if (char.Equals(actualInput, input2))
{
return input2; // there's no guarantee, that input2 == 'r'
}
我寧愿擺脫遞回以支持一個簡單的while回圈:
// static: we don't want "this" in the method
public static char ValidateInputChars(char actualInput, char input1, char input2) {
// while actualInput is NOT correct, keep asking user
while (actualInput != input1 && actualInput != input2) {
Console.WriteLine($"\n You pressed {actualInput}\nYour input is incorrect, kindly press {input1} or {input2} to proceed");
actualInput = Console.ReadKey().KeyChar;
}
return actualInput;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/373026.html
上一篇:如何跳過DataIntegrityViolationException的回滾
下一篇:如果輸入為空,則分配None
