我对C++相当陌生。
我意识到,通过简单地更改逻辑运算符,我的代码的一部分对于它要做的事情变得毫无用处。
有人可以告诉我为什么以下代码不会帮助我限制范围之外的数字的输入
这是我的代码:
int main()
{
int Xcoordinate;
cin >> Xcoordinate;
while (Xcoordinate<1 && Xcoordinate>10) //if i change the && into || it works like a charm
{
cout << "must be in 1-10 range sorry" << endl;
cout << "Try again" << endl;
cout << "X: ";
cin >> Xcoordinate;
if (Xcoordinate >= 1 || Xcoordinate <=10)
{
break;
}
}
}
有人可以解释一下如果将&&
更改为||
,为什么它会起作用吗?
&&这个逻辑条件意味着这两种情况都必须为真。 ||这意味着只有一个应该是真的,C 编程语言开始从右到左读取代码,所以如果你的 Xcoordinate 值大于 10,那么它不会查看其他情况。
在你的代码中,你的 X坐标值必须大于 10 并且小于 1,没有这样的数字。数字不能同时小于 1 和大于 10。这是你犯的逻辑错误。所以如果你这样使用它,它永远不会起作用。
while (Xcoordinate<1 && Xcoordinate>10)
你误用了简单的运算符逻辑:while (Xcoordinate<1 && Xcoordinate>10)
意味着输入应该小于 1并且大于 10(条件等效于False,因为没有数字是那么特殊的)。
但是,while (Xcoordinate<1 || Xcoordinate>10)
只要求输入小于1或大于 10(每个小于 1 的数字都是,每个大于 10 的数字都是)。
基本上,当使用condition_A && condition_B
时,您要求两个条件都为真。使用condition_A || condition_B
时,您要求至少满足其中一个条件。
相反,请考虑以下情况:
int main()
{
int Xcoordinate;
cin >> Xcoordinate;
// loops as long as Xcoordinate is not between 1 and 10 (inclusive)
while (!(Xcoordinate>=1 && Xcoordinate<=10))
{
cout << "must be in 1-10 range sorry" << endl;
cout << "Try again" << endl;
cin >> Xcoordinate;
}
}
你混淆了连接词。
案例一:
如果你的香蕉少于一根,而香蕉超过十根
不可能同时没有香蕉和十根以上的香蕉,所以......
案例二:
如果你至少有一根香蕉或最多有十根香蕉
不管你有多少香蕉,都是如此,所以...
您想切换它们:
如果你的香蕉少于一根或香蕉超过十根
Xcoordinate < 1 || Xcoordinate > 10
和
如果你至少有一根香蕉,你最多有十根香蕉
Xcoordinate >= 1 && Xcoordinate <= 10
作为额外的"奖励",第二个条件是对第一个条件的否定;
!(x < 1 || x > 10)
相当于(查看"德摩根定律")
!(x < 1) && !(x > 10)
相当于
x >= 1 && x <= 10
这意味着第二个测试是不必要的,因为这已经是终止循环的条件。
int Xcoordinate = 0;
cin >> Xcoordinate;
while (Xcoordinate < 1 || Xcoordinate > 10)
{
cout << "must be in 1-10 range sorry" << endl;
cout << "Try again" << endl;
cout << "X: ";
cin >> Xcoordinate;
}