逻辑运算符的问题。困惑主要是关于&&和||

时间:2018-01-29 11:06:38

标签: c++ logical-operators

我对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;
            }
        }
}

如果将&&更改为|| ??

,有人可以解释为什么会有效吗?

3 个答案:

答案 0 :(得分:2)

您误用了简单的运算符逻辑:while (Xcoordinate<1 && Xcoordinate>10)表示输入小于1 AND 大于10 (条件相当于 < em> False ,因为没有数字是特殊的。)

但是,while (Xcoordinate<1 || Xcoordinate>10)只要求输入小于1 OR 大于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;
        }
}

答案 1 :(得分:2)

&安培;&安培;这种逻辑条件意味着两种情况都必须为真。 ||这意味着其中只有一个应该是真的,C编程语言开始从右到左读取代码,所以如果你的Xcoordinate值大于10,那么它就不会看到其他情况。

在您的代码中,您的Xcoordinate值必须大于10且小于1,否则没有这样的数字。数字不能同时低于1且大于10。这是你所犯的逻辑错误。因此,如果您像这样使用它将无法工作。

 while (Xcoordinate<1 &&  Xcoordinate>10)

答案 2 :(得分:1)

你混淆了连字词。

案例一:

  

如果您的香蕉少于一个,那么您的香蕉就超过十个

不可能同时没有香蕉和十个香蕉,所以...

案例二:

  

如果你有至少一个香蕉,你最多有十个香蕉

无论你有多少香蕉都是如此,所以......

您想要切换它们:

  

如果您的香蕉少于一个,则您的香蕉数量超过十个

Xcoordinate < 1 ||  Xcoordinate > 10

  

如果你有至少一个香蕉,你最多有十个香蕉

Xcoordinate >= 1 && Xcoordinate <= 10

作为一个额外的&#34;奖金&#34;,第二个条件是否定第一个条件;

!(x < 1 || x > 10)

等同于(查看&#34; DeMorgan的法律&#34;)

!(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;
}