若语句不起作用,我希望它能起作用

If statement not working how I want it to

本文关键字:起作用 我希望 语句 不起作用      更新时间:2023-10-16

以下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;如果是,它应该作为一个false语句执行,但如果是任何其他数字,则应该作为true执行。然而,它保持执行为true,尽管当我输入0.5或0.6时,它应该执行为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.5或0.6;所有数字都会通过测试。您需要将逻辑或(||)替换为逻辑和(&&)。

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

if (a != 0.5 && a != 0.6)
{
    cout << "The answer is neither 0.5 nor 0.6 " << 'n';
}

a应该是浮点还是字符串?无论哪种方式,如果是使用双引号的字符串,此语法都是错误的"0.5"。不要将(in)相等与float/double进行比较,因为内部表示法无法如您所期望的那样工作,请查看如何正确、标准地比较float。

a的类型是什么?

std::字符串

假设:

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"answers"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"))

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

如果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')

必须是

if (a != 0.5 && a != 0.6)