C# 这个短路if语句有什么问题?
我知道这可能真的很愚蠢,但我不明白为什么这个if语句失败了: 如果我在控制台中输入C# 这个短路if语句有什么问题?,c#,C#,我知道这可能真的很愚蠢,但我不明白为什么这个if语句失败了: 如果我在控制台中输入1或2,则第一条If语句失败,但如果我首先将结果存储在bool中,则第二条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" || amO
1
或2
,则第一条If语句失败,但如果我首先将结果存储在bool中,则第二条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语句,我必须将&&而不是| |,但这令人困惑,因为我将其理解为:if
amOrPm
不等于1
或amOrPm
不等于2
,然后转到控制台行。我对这个定义的理解是错误的吗?这样想——如果它是1,那么它不可能是2,反之亦然。因此,它肯定是“不是1”或“不是2”
你的意思是:
if (amOrPM != "1" && amOrPM != "2")
(如果不是1,也不是2。)
或:
有关更多转换,请参阅。这样想-如果它是1,那么它不可能是2,反之亦然。因此,它肯定是“不是1”或“不是2” 你的意思是:
if (amOrPM != "1" && amOrPM != "2")
(如果不是1,也不是2。)
或:
有关更多转换,请参阅。如果(amOrPM!=“1”和&amOrPM!=“2”),则正确的方法是
。如果既不是1也不是2,你就要写。第二个之所以有效,是因为它是否定的,它要么是1要么是2。如果(amOrPM!=“1”&&amOrPM!=“2”)
,正确的事情应该是。如果既不是1也不是2,你就要写。第二个有效,因为它是否定的,它不是1就是2。你得到了!在第二种情况下,在valid前面-您正在反转结果。把它拿走!而且他们的行为都一样。你得到了!在第二种情况下,在valid前面-您正在反转结果。把它拿走!它们的行为都相同。Or是逻辑Or。它的意思是:
如果输入1,则第一个条件为false,但第二个条件为true,因此失败
如果输入2,则第一个条件为true,但第二个条件为false,因此失败。对于这两种情况,条件都不可能为假。或是逻辑Or。它的意思是:
如果输入1,则第一个条件为false,但第二个条件为true,因此失败
如果输入2,则第一个条件为true,但第二个条件为false,因此失败。这两个条件都不可能为假。amOrPM!=“1”| | amOrPM!=“2”
将始终为真。如果(amOrPM!=“1”和&amOrPM!=“2”)与相同,您不想吗!(amOrPM==“1”和&amOrPM==“2”)
。向你学习德摩根定律。谢谢你,斯克鲁姆,我相信和这个词会把我甩在这里。当我看到它时,我在想amOrPM
应该等于1和2才是真的。@Xaisoft-No,因为您正在使用!=而不是==。amOrPM不等于1和2amOrPM!=“1”| | amOrPM!=“2”
将始终为真。如果(amOrPM!=“1”和&amOrPM!=“2”)与相同,您不想吗!(amOrPM==“1”和&amOrPM==“2”)
。向你学习德摩根定律。谢谢你,斯克鲁姆,我相信和这个词会把我甩在这里。当我看到它时,我在想amOrPM
应该等于1和2才是真的。@Xaisoft-No,因为您正在使用!=而不是==。amOrPM不等于1和2OK,这会清除它。我想让我不舒服的是单词和
,当我看到这个时,我想amOrPM
可以因为某种原因同时有两个值。好了,这就把它清除了。我想让我感到不舒服的是单词和
,当我看到这一点时,我想amOrPM
可以因为某种原因同时有两个值。