是什么在使用&&和||差异在do ... while循环?
-
22-07-2019 - |
题
#include<iostream>
using namespace std;
int main()
{
char again;
do
{
cout<<"you are in the while loop";
cout<<"do you want to continue looping?";
cin>>again;
} while (again != 'n' || again != 'N');
system("pause");
return 0;
}
我知道有错误与在“而”的测试条件。但我不能弄清楚。
当用户的输入既不是“N”和“N”,环路应该继续打印的代码“你在while循环”。一旦“n”或“N”被按压时,该程序将被终止。
不过,对于我的代码,程序将继续无论循环的代码输入怎样的角色。 但是,当我改变“||”到“&&”,如所期望的程序可以运行。 谁能告诉我是怎么回事?
解决方案
这是一个常见的布尔逻辑问题。 ||
是指“或”,这意味着“只要这一侧为真,那么该表达式为true”。所以,当你传递一个大写'N'
到c != 'n' || c != 'N'
节目说“好了,'N'
不等于'n'
,因此一个表达一边是真实的,因此整个表达式为true,没有必要检查表达式的其余部分。 “甚至当你按小写'n'
,该方案说“好了,'n'
等于'n'
,但它不等于'N'
,因此一个表达一边是真实的,因此整个表达式为true。”这就是在你的while循环发生。
在另一方面,&&
意味着“和”,这意味着“表达的两侧必须为真”;当你经过大写'N'
到c != 'n' && c != 'N'
程序认为“'N'
不等于'n'
,但它是等于'N'
,因此仅表达的一侧是真实的,因此表达式为假。”
这得令人困惑,因为如果你正在测试,看看输入的字符是等于你会用||
例如,“我想知道,如果'a'
或 'b'
或特定值(强> 'c'
被输入“)。
基本上,当你会使用||
针对特定表达式,并且希望的是表达则需要改变到&&
的相反(例如,我想无'a'
,'b'
或'c'
的;或者换一种方式,该值不能'a'
和强>它不能被'b'
,和强>它不能被'c'
“)。同样地,如果将使用&&
用于特定表达,和要相对那表情,那么你需要使用||
,这是德摩根定律,这我会建议你读了这样你可以避免重新发现他们每个人对自己的一个。
其他提示
是:||是“或”和&&是“和”
每个的字符是或者 “不是 'N'” 或 “不是 'N'”,因为它不可能是两个' n”和 'N' 同时
写入条件的另一种(可能更简单的读取)的方式将是:
!(again == 'n' || again == 'N')
,这意味着 “相反的(同样是或者 'n' 或 '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
这就是一切!
我明白你的问题很好,这里的解释是:
在do-while循环是一个退出条件循环。这意味着循环体总是最先执行。然后,测试条件进行评价。如果测试条件为真,程序再次执行循环体。如果测试条件为FALSE,循环终止并且程序执行与在跟随发言继续
在你的代码,当你press'n“or'N”,你的测试条件将永远一个真实,一个假的, 所以,当你使用||你会满足测试条件(真||假=真),所以程序会再次执行循环体。 但是当使用&&,这将给出(真&&假=假),测试条件不再被statisfied,所以程序将不会再次执行循环体。
我希望这是有帮助的.....享受编程! Ameraradi
&&是逻辑AND。 ||是一个逻辑OR。
(也&是逐位AND,并且|。是按位OR)
您可能会想尝试,而(!(再次== 'N' ||再次== 'N'))