为什么这不起作用?即使answer
的值为"Y"
或"N"
(我在调试器中检查过)并且我一直收到输入无效,while循环也不会结束消息。
Console.Write("\nYes or No(Y or N): ");
string answer = Console.ReadLine();
while(!answer.Equals("Y") || !answer.Equals("N"))
{
invalidInput();
answer = Console.ReadLine();
}
答案 0 :(得分:4)
为了避免此类错误(||
而不是&&
),请将其设为:
// StringComparer.OrdinalIgnoreCase - let's ignore case and accept "n" or "YES"
Dictionary<string, bool> validAnswers = new Dictionary<string, bool>(
StringComparer.OrdinalIgnoreCase) {
{ "Y" , true},
{ "N", false},
{ "Yes" , true},
{ "No", false},
// Add any other responses here, say {"OK", true}
};
Console.Write("\nYes or No(Y or N): ");
bool answer = false;
// Keep asking while answer is not valid one
// .Trim() - let's be nice and allow leading and trailing spaces
while (!validAnswers.TryGetValue(Console.ReadLine().Trim(), out answer)) {
invalidInput();
}
答案 1 :(得分:1)
您可以将这两个条件放在括号中。 以下示例也不区分大小写。
Console.Write("\nYes or No(Y or N): ");
string answer = Console.ReadLine();
while (!(answer.ToUpper().Equals("Y") || answer.ToUpper().Equals("N")))
{
invalidInput();
answer = Console.ReadLine();
}
答案 2 :(得分:1)
字符串永远不能等于两个不同的字符串。每次answer.Equals("Y")
answer.Equals("N")
中的一个或两个都是假的。使用! ||
时,整体表达式每次都为真。
我认为你在寻找
!answer.Equals("Y") && !answer.Equals("N")
或
!(answer.Equals("Y") || answer.Equals("N"))