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

时间:2015-10-23 18:54:55

标签: c++ if-statement

所以我对C ++很陌生,我正在玩代码。我写了一个if语句,检查你是否写了“是”或“否”,然后基于此给出不同的答案。

我遇到的问题是,当我写下“不”时,它给了我相同的答案,好像我写了“是”; “好”。

我正在使用控制台(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;
}

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

2 个答案:

答案 0 :(得分:10)

try

错了。使用

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

代替。在您的代码中发生以下不幸的一系列事件:编译器首先评估if(happy == "yes" || happy == "Yes") happy == "yes"booltrue),然后将其与C进行OR运算-string常量&#34;是&#34;,它衰减到非空指针,并且可以转换为false。最后,你会得到truebool之间的OR,这总是正确的,令人失望。

根据经验,始终在打开所有警告的情况下编译您的程序:对于gcc,我通常使用true。这样的事情可能会在编译时捕获,所以你至少可以开始徘徊为什么警告。

编辑有趣的是,gcc和clang都没有警告你的代码。当然,它们不是必需的,但如果它们会这样做会很好。

答案 1 :(得分:0)

这应该可行,试试这个:

string happy;

getline(cin, happy);

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