是的:|| 是"或"而&&是"和".
每个字符是任一 "不'N’"或"不是'N’",因为它不可能是两个 "n"和"N"同时.
另一种(可能更简单的阅读)写条件的方式是:
!(again == 'n' || again == 'N')
这意味着"相反的(同样是任一 'n’或'N’)".
是的:|| 是"或"而&&是"和".
每个字符是任一 "不'N’"或"不是'N’",因为它不可能是两个 "n"和"N"同时.
另一种(可能更简单的阅读)写条件的方式是:
!(again == 'n' || again == 'N')
这意味着"相反的(同样是任一 'n’或'N’)".
这是一个常见的布尔逻辑问题. ||
意思是"或",意思是"只要这方面的一方是真的,那么表达就是真的." 所以当你'N'
向c != 'n' || c != 'N'
程序传递一个大写字母时说"好吧,'N'
不等于'n'
,因此表达式的一边是真的,因此整个表达式都是正确的,不需要检查表达式的其余部分." 即使按下小写'n'
,程序也会说"好,'n'
等于'n'
,但它不等于'N'
,因此表达式的一面是真的,因此整个表达式都是正确的." 这就是你的while循环中发生的事情.
另一方面,&&
意思是"和",意思是"表达的两面必须是真的"; 当你将大写字母传递'N'
给c != 'n' && c != 'N'
程序时,认为" 'N'
不等于'n'
,但它等于'N'
,因此只有表达式的一侧为真,因此表达式为假".
因为如果你正在测试,看看输入的字符是等于你会使用特定的值,这得到混乱||
(例如,"我想知道是否'a'
或 'b'
或 'c'
输入了").
基本上,当你使用||
特定的表达式,并且你想要与那个表达式相反时,你需要改变为&&
(例如,我不想要'a'
,'b'
或者'c'
;或者换句话说,价值不可能'a'
而且它不可能是'b'
,而不能是'c'
").同样的,如果你会使用&&
特定的表情,和你想要的表达,那么你需要使用的相反||
,这是德摩根定律,我建议你就这么读了一个你可以避免自己重新发现它们.
这是一个名为" De Morgan定律 " 的布尔代数.
Not (P And Q) = (Not P) Or (Not Q) Not (P Or Q) = (Not P) And (Not Q)
在您的情况下,您希望用户不要输入'n'
或'N'
,它可以转换为此逻辑.
!(again == 'n' || again == 'N')
在应用De Morgan的法律时,它将是
(again != 'n' && again != 'N')
有关详细信息,您可能需要阅读命题逻辑
虽然现在的原始海报很开心,但我没有在其他答案中看到这个:
(true && true ) == true (true && false) == false (false && true ) == false (false && false) == false (true || true ) == true (true || false) == true (false || true ) == true (false || false) == false !true == false !false == true
这就是一切!