我知道这可能真的很愚蠢,但我不明白为什么这个 if 语句会失败:
如果我在控制台输入 1
或 2
,第一个 if 语句失败,但如果我首先将结果存储在 bool 中,第二个语句通过。为什么?我可能在这里做了一些愚蠢的事情?
Console.WriteLine("Enter 1 for AM or 2 for PM?");
string amOrPM = Console.ReadLine();
//Why does this fail if I enter 1 or 2?
if (amOrPM != "1" || amOrPM != "2")
Console.WriteLine("You must enter 1 for AM or 2 for PM. Try again.");
//This works!
bool valid = (amOrPM != "1" || amOrPM != "2");
if (!valid)
Console.WriteLine("You must enter 1 for AM or 2 for PM. Try again.");
我刚刚注意到第一个 if 语句,我不得不用 && 而不是 ||,但这很令人困惑,因为我读它是这样的:如果 amOrPm
不等于 1
或 amOrPM
不等于 2
,然后转到控制台行。我读错了这个定义吗?
最佳答案
这样想 - 如果它是 1,那么它就不可能是 2,反之亦然。所以它肯定是或者“不是 1”或者“不是 2”。
你的意思是:
if (amOrPM != "1" && amOrPM != "2")
(如果它“不是 1”并且它是“不是 2”。)
或者:
if (!(amOrPm == "1" || amOrPm == "2"))
参见 De Morgan's Laws进行更多转换。
关于c# - 这个短路的 if 语句有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403116/