C ++距离函数保持返回-1

时间:2014-09-09 18:34:11

标签: c++ pointers reference distance

我创建了一个程序来计算两点之间的距离,并找到斜率。

1)我如何将程序更改为严格指针?

2)无论输入什么,距离函数都返回“-1”。我100%肯定我的算术是正确的,但似乎出现了问题。

 // This program computes the distance between two points
 // and the slope of the line passing through these two points.

    #include<iostream>
    #include<iomanip>
    #include<cmath>
    using namespace std;

    struct Point
    {
        double x;
        double y;
    };

    double distance(Point &p1, Point &p2);
    double slope(Point &p1, Point &p2);

    int main()
    {
        Point p1, p2;
        char flag = 'y';
        cout << fixed << setprecision(2);
        while(flag == 'y' || flag == 'Y')
        {
            cout << "First x value: "; cin >> p1.x;
            cout << "First y value: "; cin >> p1.y;
            cout << "Second x value: "; cin >> p2.x;
            cout << "Second y value: "; cin >> p2.y; cout << endl;

            cout << "The distance between points (" << p1.x << ", " << p1.y << ") and (";
            cout << p2.x << ", " << p2.y << ") is " << distance(&p1, &p2);

            if ((p2.x - p1.x) == 0)
            { cout << " but there is no slope." << endl; cout << "(Line is vertical)" << endl; }
            else
            { cout << " and the slope is " << slope(p1, p2) << "." << endl; }

            cout << endl;
            cout << "Do you want to continue with another set of points?: "; cin>> flag;
            cout << endl;
        }
        return 0;
    }

    double distance(Point &p1, Point &p2)
    {
        return sqrt((pow((p2.x - p1.x), 2) + pow((p2.y - p1.y), 2)));
    }

    double slope(Point &p1, Point &p2)
    {
        return (p2.y - p1.y) / (p2.x - p1.x);
    }

1 个答案:

答案 0 :(得分:7)

您的代码被破坏的地方:

cout << p2.x << ", " << p2.y << ") is " << distance(&p1, &p2);

将类型为Point *的对象传递给期望为Point的函数。

为什么我们没有看到编译器的错误:

因为您有using namespace std,您的代码可能实际上正在调用std::distance(),并且它告诉您指针&p1&p2之间的距离。

推荐阅读:

Why is "using namespace std" considered bad practice?