如果声明不工作我想要它

时间:2012-07-26 08:12:05

标签: c++

以下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语句中执行!=

6 个答案:

答案 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

假设:

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 ,因此效果很好。

const char *

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 / double

比较浮点数时,可能会遇到精度问题。您可以编写一些函数或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')