以下C ++代码:
if (a != '0.5' || a != '0.6')
{
cout << "The answer is neither 0.5 nor 0.6 " << '\n';
}
我也试过
if ((a != '0.5') || (a != '0.6'))
{
cout << "The answer is neither 0.5 nor 0.6 " << '\n';
}
并尝试了
if ( !(a== '0.5') || !(a==0.6)
{
cout << "The answer is neither 0.5 nor 0.6 " << '\n';
}
从用户处收到一个号码,检查号码是0.5还是0.6;如果是,它应该作为假声明执行,但如果它是任何其他数字,它应该执行为真。但是,当我输入0.5或0.6时,它仍然执行为true,尽管它应该执行为false。当我使用else if语句时,这是不同的,它可以正常工作:
if (a != 0.5)
{
//what to do if true.
}
else if (a != 0.6)
{
//What to do if this is true and the first id wrong.
}
else
{
//What to do if none are true.
}
为什么不能在if语句中执行!=
答案 0 :(得分:3)
逻辑错误。您目前正在检查数字是否同时为0.5或不是0.6;所有数字都将通过该测试。您需要将逻辑 - 或(||
)替换为逻辑 - 和(&&
)。
此外,您需要从数字中删除单引号,否则您将创建具有实现定义值的多字符文字。
if (a != 0.5 && a != 0.6)
{
cout << "The answer is neither 0.5 nor 0.6 " << '\n';
}
答案 1 :(得分:2)
a应该是浮点数还是字符串?无论哪种方式,这种语法都是错误的&#39; 0.5&#39;如果它是一个字符串使用双引号。不要将float / double与(in)相等进行比较,因为内部表示不会像你期望的那样工作,请参阅how-to-correctly-and-standardly-compare-floats。
答案 2 :(得分:1)
a 的类型是什么?
假设:
std::string a;
std::cin >> a;
然后以下代码有效:
if (a == "0.5" || a == "0.6")
{
// Do something when it's true
}
else
{
// Do something when it's false
}
虽然“0.5”和“0.6”是 const char * ,但它们会转换为 std :: string ,因此效果很好。
char a[BUFSIZE];
std::cin >> a;
if (strcmp(a, "0.5") == 0 || strcmp(a, "0.6") == 0)
{
// Do something when it's true
}
else
{
// Do something when it's false
}
您可以使用 strcmp 来比较c风格的字符串
比较浮点数时,可能会遇到精度问题。您可以编写一些函数或Float类来解决问题。像这样:
const double EPS = 1e-8;
inline bool FloatEqual(const double lhs, const double rhs)
{ return std::fabs(rhs-lhs) <= EPS; }
int main()
{
double a;
std::cin >> a;
if (FloatEqual(a, 0.5) || FloatEqual(a, 0.6))
{
// Do something when it's true
}
else
{
// Do something when it's false
}
}
有趣的是发现以下陈述是相同的
if (a == "0.5" || a == "0.6")
if (!(a != "0.5" && a != "0.6"))
答案 3 :(得分:0)
从0.5和0.6中删除单引号,你应该使用&amp;&amp;(AND)而不是||(OR),即:
if (a != 0.5 && a != 0.6)
答案 4 :(得分:0)
一定是
if (a != 0.5 && a != 0.6)
答案 5 :(得分:0)
如果a
是一个字符,那么当您执行以下操作时会发生奇怪的事情:
char a = '0.5';
cout << "A: " a << endl;
这将输出(在我的编译器上,无法确定其他任何内容):
A: 5
和
char a = '0.5';
if (a == '5')
cout << "yey" << endl;
else
cout << "oops" << endl;
这将输出:
yey
但我认为这种行为是未定义的(我不确定)。无论如何,它不会像你认为的那样做。
其次我认为你的逻辑错了:
你在说:
如果不是0.5
或不是0.6
我认为你的意思
如果不是0.5
而不是0.6
if (a != '0.5' && a != '0.6')