c++ - 我写了一个 if/elseif 语句,但它只给了我第一个答案,为什么?

标签 c++ if-statement

所以我是 C++ 的新手,我正在研究代码。我正在写一个 if 语句,它会检查你是否写了"is"或“否”,然后根据它给你不同的答案。

我遇到的问题是,当我写下“否”时,它给我的答案就好像我写下"is"一样; “好的”。

我正在使用控制台 (MSDOS) 而不是 API,我对 C++ 和整体编程还是很陌生,这可能就是我无法让它工作的原因。

代码如下:

string happy;

getline(cin, happy);

if(happy == "yes" || "Yes")
{
    cout << "Nice" << endl;
}
else if(happy == "no" || "No")
{
    cout << "Not nice" << endl;
}
else
{
    cout << "Alright..." << endl;
}

我已经尽力找出答案,看看代码中是否有错误,但我似乎找不到任何东西。如果你能帮助我,我会很高兴。

最佳答案

if(happy == "yes" || "Yes")

错了。使用

if(happy == "yes" || happy == "Yes")

相反。以下一系列不幸的事件发生在您的代码中:编译器首先评估 happy == "yes",它是一个 bool(truefalse),然后将其与 C 字符串常量“Yes”进行 OR 运算,后者会衰减为非空指针,并可转换为 true。最后你得到一个 booltrue 之间的 OR,这总是 true,真可惜。

根据经验,始终在打开所有警告的情况下编译您的程序:对于 gcc,我通常使用 -Wall -Wextra。这些事情可能会在编译时被捕获,因此您至少可以开始思考为什么会出现警告。

编辑 有趣的是,gcc 和 clang 都没有对您的代码发出任何警告。当然,它们不是必需的,但如果有就更好了。

关于c++ - 我写了一个 if/elseif 语句,但它只给了我第一个答案,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33309535/

相关文章:

java - 如何创建一个简单的横向卷轴游戏

string - 如何在 Robot Framework 中搜索空字符串/比较两个字符串

c++ - 使用 RapidXML 解析 XML 文件 - 仅解析文件的第一行

c++ - 创建对新对象的引用

java - android 夹板字符串

jquery - 检查输入值 > 0 jQuery Coffee

excel - 如果一列的条件为空,如何返回值

没有运算符的 JavaScript If 语句条件?它有什么作用?

c++ - 有没有像 C++ 的 GhostDoc 之类的东西

c++ - 试图替换 C++ 字符串中的字符,完全卡住