所以我对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;
}
Run Code Online (Sandbox Code Playgroud)
我已尽力找到答案,看看代码中是否有问题,但我似乎找不到任何东西.如果你能帮助我会很高兴.
vso*_*tco 10
if(happy == "yes" || "Yes")
Run Code Online (Sandbox Code Playgroud)
是错的.使用
if(happy == "yes" || happy == "Yes")
Run Code Online (Sandbox Code Playgroud)
代替.在您的代码中发生以下不幸的一系列事件:编译器首先计算happy == "yes",它是bool(true或者false),然后将它与C字符串常量"是"进行OR运算,它将衰减为非空指针,并且可以转换为true.最后,你得到一个bool和之间的OR true,这总是正确的,无赖.
根据经验,总是在打开所有警告的情况下编译程序:对于gcc,我通常使用-Wall -Wextra.这样的事情可能会在编译时捕获,所以你至少可以开始徘徊为什么警告.
编辑很有趣,gcc和clang都没有警告你的代码.当然,它们不是必需的,但如果它们会很好的话.