如果语句始终执行,即使条件为假?

时间:2015-04-01 10:41:30

标签: c++ if-statement

当它到达这个if语句时,无论输入什么'选项',它总是设置if(option ==“y”||“Y”)条件为真?

bool UserInterface::readInConfimDeletion() const
{
    string option = "";
    cout << "Are you sure you want to delete these transactions? Y/N "; 
    cin >> option;

    if (option == "y" || "Y")
    {
        return true;
    }
    else if (option == "n" || "N")
    {
        return false;
    }
    else{
        readInConfimDeletion();
        }

}

3 个答案:

答案 0 :(得分:4)

你无法比较像这样的多个条件:

if (option == "y" || "Y")

如果评估,“Y”条件将始终评估为true

你需要这样做:

if (option == "y" || option== "Y")

IMO将字符串大写并执行单个比较会更简单,有很多选项可以做到这一点:Convert a String In C++ To Upper Case

所以可能的解决方案是:

#include <boost/algorithm/string.hpp>
string upperStr = boost::to_upper_copy(option);

然后你可以这样做:

if (upperStr == "Y")

答案 1 :(得分:2)

像这样改变:

if (option == "y" || option ==  "Y")

和类似的

else if (option == "n" || option == "N")

您无法比较多个字符串,就像您正在做的那样。

答案 2 :(得分:2)

你需要说option == "y" || option == "Y"等..

仅供参考/ if (option == "y" || "Y")实际上询问option == "y"或... "Y"本身是true"Y"是一个符合标准的字符串文字转换为const char*然后 - 在if内使用 - 会进一步转换为bool true(因为指针不是nullptr,它被视为{{ 1}})。