【问题标题】:I need to implement a while loop with two conditions我需要用两个条件实现一个while循环
【发布时间】:2017-07-23 20:19:19
【问题描述】:

下面的while循环有两个条件 cin >> 用户;

while (( user != 'X') || ( user != 'O'))
{
    cout << "Please enter either X or O " << endl;
    cin >> user;
}

在我输入 X 或 O 后,它一直要求输入新的输入。我不明白为什么?但是,如果我删除其中一个条件,它就会正常工作。

【问题讨论】:

    标签: c++


    【解决方案1】:

    想想“这东西不是 X,或者这东西不是 Y”的逻辑——除非 X 和 Y 重叠,这样的条件总是为真,即使是英文! p>

    你被口语和微妙不同的“这东西既不是X也不是Y”误导了,但是你的代码不是“既不是X也不是Y”,而是“不是X或不是Y” ”。

    你的意思是“不是 X 也不是 Y”。

    while (( user != 'X') && ( user != 'O'))
    

    【讨论】:

      【解决方案2】:

      使用&amp;&amp;(和)代替||(或)。

      【讨论】:

        【解决方案3】:

        你的条件总是正确的......

        while (( user != 'X') || ( user != 'O'))
        

        如果user'X' 那么user 不是'O' 因此,即使不满足条件的第一部分,也满足条件的第二部分。所以整个条件是true

        如果user'O',也是一样。

        尝试使用“逻辑与”(又名&amp;&amp;)而不是“逻辑或”。

        【讨论】:

          【解决方案4】:

          您似乎想要逻辑 AND (&amp;&amp;) 而不是逻辑 OR (||)。

          【讨论】:

            【解决方案5】:

            如果您想更直观地了解发生了什么,请反转您的表达逻辑:

            != 变为 ==||(或)变为 &amp;&amp;(和)。

            所以你写的是:

            如果用户等于“X”且用户等于“O”,则退出循环。

            如您所见,user 不可能同时具有两个值。

            你想要的是:

            while (( user != 'X') && ( user != 'O'))
            {
                cout << "Please enter either X or O " << endl;
                cin >> user;
            }
            

            【讨论】:

              【解决方案6】:

              嗯,|| 表示或。如果你大声朗读这个条件,听起来就像“虽然用户不是 X 或用户不是 O。如果你仔细想想,它总是正确的——当它是 X 时,它也不是 O,当是O,不是X。你可能需要的是&amp;&amp;

              while (( user != 'X') && ( user != 'O'))
              

              这样,当用户既不是X也不是O时,循环将停止。

              【讨论】:

              • 谢谢你的解释,现在说得通了。
              【解决方案7】:

              那是因为您使用的是 OR 运算符。

              你问的是用户不是 X 还是用户不是 O 继续要求输入。

              将其更改为 && 运算符

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-12-18
                • 2019-03-08
                • 2015-06-18
                • 1970-01-01
                • 2021-03-19
                • 1970-01-01
                • 1970-01-01
                • 2010-11-11
                相关资源
                最近更新 更多