这个短路的if语句有什么问题

本文关键字:什么 问题 语句 if 短路 | 更新日期: 2023-09-27 18:32:47

我知道这可能真的很愚蠢,但我无法弄清楚为什么这个if语句失败:

如果我在控制台输入 12,第一个 if 语句失败,但如果我先将结果存储在布尔值中,第二个语句就会通过。为什么? 我可能在这里做傻事?

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 ,然后转到控制台行。 我读错了这个定义吗?

这个短路的if语句有什么问题

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

你是说:

if (amOrPM != "1" && amOrPM != "2") 
(如果它是"不是

1"并且它是"不是 2"。

或:

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

参见德摩根定律了解更多变换。

在第二种情况下,在有效前面有 !- 你正在反转结果。删除它!他们都会表现得一样。

正确的事情是if (amOrPM != "1" && amOrPM != "2")。如果它既不是 1 也不是 2,你想写。第二个工作是因为它否定,它是 1 或 2。

or

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

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

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