0

以下 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 时它应该执行为 false,但它仍然执行为 true。当我使用可以正常工作的 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 语句中不能执行?

4

6 回答 6

3

逻辑是错误的。您当前正在同时检查一个数字是否不是 0.5 或不是 0.6;所有数字都将通过该测试。您需要将逻辑或 ( ||) 替换为逻辑与 ( &&)。

此外,您需要从数字中删除单引号,否则您将创建一个具有实现定义值的多字符文字。

if (a != 0.5 && a != 0.6)
{
    cout << "The answer is neither 0.5 nor 0.6 " << '\n';
}
于 2012-07-26T08:27:37.240 回答
2

a is supposed to be a float or a string ? In either way, this syntax is wrong '0.5', if it's a string use double quotes. Don't compare with float/double for (in)equality, because of the internal representation this won't work as you expect, see how-to-correctly-and-standardly-compare-floats.

于 2012-07-26T08:18:07.150 回答
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"))
于 2012-07-26T09:40:11.773 回答
0

从 0.5 和 0.6 中删除单引号,您应该使用 &&(AND) 而不是 ||(OR) 即: if (a != 0.5 && a != 0.6)

于 2012-07-26T08:15:31.770 回答
0

肯定是

if (a != 0.5 && a != 0.6)
于 2012-07-26T08:17:20.100 回答
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')
于 2012-07-26T08:28:46.157 回答