C ++基础知识 - 如果语句测试

时间:2014-05-07 15:19:47

标签: c++ nan

这是我第一天搞乱C ++。我试着做一个非常基本的代码来寻找二次方程中的根。到目前为止,这是我的代码:

#include <iostream>
#include <cmath>

int main () {

    int a, b, c;
    double root1, root2;

    std::cout << "Enter the integers a, b, and c to fit in the quadratic equation: ax^2 + bx + c >> " << std::endl;
    std::cout << "a = ";
    std::cin >> a;
    std::cout << "b = ";
    std::cin >> b;
    std::cout << "c = ";
    std::cin >> c;
    std::cout <<"\n";
    std::cout << "Quadratic equation to solve is : " << a << "x^2 + " << b << "x + " << c <<std::endl;

    root1 = (-b + sqrt(b*b - 4*a*c))/(2*a); 
    root2 = (-b - sqrt(b*b - 4*a*c))/(2*a);

    if (root1 && root2 != nan) {
        std::cout << "root 1 = " << root1 << std::endl;
        std::cout << "root 2 = " << root2 << std::endl;
    }
    else 
    std::cout << "no root exists" << std::endl;

    return 0;
    }

我收到此错误:

invalid operands to binary expression ('double' and 'double (*)(const char *)')

在该行:

if (root1 && root2 != nan) 

我正在寻找一个简单的测试,看看根是否存在,这显然不起作用。在此先感谢您的帮助!

4 个答案:

答案 0 :(得分:5)

要检查某些内容是否为实数,请使用isnan

if(!isnan(root1) && !isnan(root2)) 

<强>解释

isnan确定给定的浮点数arg是否不是数字(NaN)。如果arg是NaN,则返回true,否则返回false

NaN值用于标识浮点元素的未定义或不可表示的值,例如负数的平方根或0/0的结果。在C ++中,它使用每个浮点类型的函数重载来实现,每个浮点类型返回一个bool值。

答案 1 :(得分:3)

使用(C++11):

#include <cmath>
...
if (!isnan(root1) && !isnan(root2)) 

答案 2 :(得分:3)

double (*)(const char *)是一种类型,它表示指向返回double并带有const char *参数的函数的指针。如果您查看cmath的引用,nan是相关函数,您会发现。

看起来您应该能够使用空字符串调用它以获得合适的值:

nan("")

但是,您无法在double的一侧提供&&而在另一方提供bool,因此您需要对{{1}进行合适的测试同样。

是的,root1的类型语法有点疯狂,这就是C函数指针语法的作用,函数名称本身代表一个指向它的指针,这就是你得到的结果编译器,因为C ++继承了C风格的函数指针。

答案 3 :(得分:1)

使用if (root1 != nan("") && root2 != nan(""))

问题出在两个地方:

  1. root1始终为真,除非0
  2. nan未声明,应为nan("")
  3. 但我认为最好使用!isnan(root1)而不是nan