当它到达这个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();
}
}
答案 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}})。