1

我知道这可能真的很愚蠢,但我不明白为什么这个 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不等于1amOrPM不等于2,则转到控制台行。我在阅读这个错误的定义吗?

4

4 回答 4

7

这样想 - 如果它1,那么它不可能是 2,反之亦然。所以它肯定是非 1”“非 2”。

你的意思是:

if (amOrPM != "1" && amOrPM != "2") 

(如果它是“非 1”并且它是“非 2”。)

或者:

if (!(amOrPm == "1" || amOrPm == "2"))

有关更多转换,请参阅德摩根定律

于 2012-05-01T19:31:39.880 回答
3

你有 !在第二种情况下的有效前面 - 你正在反转结果。删除那个!他们的行为都是一样的。

于 2012-05-01T19:32:43.127 回答
2

正确的做法是if (amOrPM != "1" && amOrPM != "2")。如果它既不是 1 也不是 2,你想写。第二个有效,因为它否定,它不是 1 就是 2。

于 2012-05-01T19:32:03.883 回答
2

或是一个逻辑或。它的意思是这样的:

如果输入 1,则第一个条件为假,但第二个条件为真,因此失败。

如果输入 2,则第一个条件为真,但第二个条件为假,因此失败。对于他们俩来说,条件永远不会是错误的。

于 2012-05-01T19:33:49.240 回答