c++ - 如何在 else-if 语句中正确使用 or 语句 (||)

标签 c++ if-statement logical-operators

考虑这段代码:

string GameExit;
bool GameChoiceGo = true;

while (GameChoiceGo == true)
{
    system("cls"); 
    cout << "\n  Are you sure you want to exit? (Yes or No)     ";
    cin >>  GameExit;
    if (GameExit == "y" || "Y" || "yes" || "Yes" || "YES")
    {
        cout << "User typed Yes";
        Sleep(3000);
        system("cls");
        break;
    }
    if (GameExit == "n" || "N" || "no" || "No" || "NO")
    {
        cout << "User typed No";
        Sleep(3000);
        system("cls");
        GameChoiceGo = false;
    }
    else
    {
        cout << "\nI'm sorry but, " << GameExit << " is not a acceptable choice. Type: Yes or No.\n\n\n";
        Sleep(3000);
        system("cls");
    }
}
break;

这里,只有第一条语句被激活。即使用户键入 "No" 或任何其他内容,它也会输出 "user typed yes"

else-if 语句 如果我只用一个语句(即 "y""替换 or 语句,则该语句起作用n").唯一的问题是,我想要用户可能在代码中键入的任何可能版本的 yes 和 no。

代码无法正常工作的任何想法?

最佳答案

很抱歉,您必须为要检查的每个条件编写 GameExit ==:

if (GameExit == "y" || GameExit == "Y" || GameExit == "yes" || GameExit == "Yes" || GameExit == "YES")

如果你写 if ("y")(这基本上就是你正在做的,只是有更多的语句),const char[] 将衰减为const char*,该指针将与 0 进行比较。现在,该指针将永远为空,因为总会为字符串文字分配内存。

更好的解决方案是 (1) 创建一个包含所有选项的数组,以便检查条件成为一个简单的搜索或 (2) 例如将输入转换为全小写,然后进行比较。

// 1)
std::vector<std::string> options = { "y", "Y", "yes", "Yes", "YES" };

if (std::find(options.begin(), options.end(), GameExit) != options.end());
// or
if (std::any_of(options.begin(), options.end(), [&GameExit](const auto& value) { 
        return GameExit == value;
   }); 

// 2)
std::transform(GameExit.begin(), GameExit.end(), GameExit.begin(), ::tolower);

if (GameExit == "y" || GameExit == "yes");

如果您不知道函数的作用,可以查找函数:)。

关于c++ - 如何在 else-if 语句中正确使用 or 语句 (||),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42563570/

相关文章:

c++ - C++程序中的堆栈溢出错误

c++ - Vec3b 使用问题和获取 Mat 对象中某个点的 RGB 值

c++ - 面向低延迟大数据交换的多线程boost C++程序设计

C、#if指令和编译错误: operator '/' has no right operand

python - 关于我制作的小型转换器的IF语句问题

c++ - 我应该使用函数还是无状态仿函数?

javascript - 如果还有其他故障排除

javascript - 在 Typescript 中处理 null >= 0

java - boolean 运算符的差异 : & vs && and | vs ||

javascript - 为什么逻辑运算符(&& 和 ||)不总是返回 bool 结果?