还是操作员没有按应有的方式操作?C++ [已关闭]

Or operator not operating as it should ? c++ [closed]

提问人:David Garza 提问时间:11/1/2022 最后编辑:Remy LebeauDavid Garza 更新时间:11/1/2022 访问量:83

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

去年关闭。

我根本不明白错误是什么。一旦我使语句包含运算符,我的程序就不会接受任何正确的输入。相反,即使我输入或 .iforyn

(如果这很简单,也很抱歉,我是编程新手)

我尝试使用 ,但它仍然对我不起作用。else if

#include <iostream>
using namespace std;

int main()
{    
    char ans;
    bool correct = true;
    
    while(correct){
        cout << "Do you like ice cream? (y/n) ";
        cin >> ans;

        if(ans != 'y' || ans != 'n')
        {
            cout << "wrong\n";
        }
        else
        {
            correct = false;
        }
    }
    
    cout << "Thanks for your input!" << endl;
    
    return 0;
}
c++ 布尔逻辑

评论

11赞 drescherjm 11/1/2022
(ans != 'y' || ans != 'n')无论值是什么,始终为 true。如果 ans 不等于 。如果 is it 不等于 if it's any other character, it not equal to both 和ansynansnyny
0赞 JHBonarius 11/1/2022
想想吧。向别人解释一下。它有帮助
1赞 Useless 11/1/2022
如果你是编程新手,并且你问一个有25年历史的系统编程语言中的布尔运算符是否坏了,那么你显然问错了问题。试着写一个真值表,它们真的很有帮助。
0赞 Remy Lebeau 11/1/2022
您需要使用 (and) 而不是 (or):(即,如果不是 AND 如果不是 then )。此外,您的变量实际上没有意义,应该删除。只需使用一个循环,它就准备好了。&&||if(ans != 'y' && ans != 'n')ansyansnwrongcorrectdo..while(true)break
1赞 David Garza 11/1/2022
非常感谢你们,我的逻辑是有缺陷的,你们帮我弄清楚了!我很抱歉。

答:

1赞 Ilya 11/1/2022 #1
if(ans != 'y' || ans != 'n')

此结果始终为 True。在此方案中,应使用 && 而不是 ||。

试着在脑海中模拟:

ans = 'n' 将第一部分的计算结果为 True

ans = 'y' 将第二部分计算为 True

ans = 'potato' 将两个部分的计算结果都计算为 True