3个共线点 - 一些错误

时间:2014-03-15 12:27:00

标签: c++ struct

任何人都可以告诉我它为什么不适用于输入0 0 0 0 0 0

struct pPoint
{
    float x, y;
};

struct line
{
    pPoint x1, x2, x3;
};

bool judge(line& x)
{
    if (x.x1.x == x.x2.x == x.x3.x)
        return true;
    else
    {
        if (x.x1.y == x.x2.y == x.x3.y)
            return true;
        else
        {
            float a = (x.x1.y - x.x2.y) / (x.x1.x - x.x2.x);
            float b = x.x1.y - x.x1.x*a;
            if (x.x3.y == a*x.x3.x + b)
                return true;
            return false;
        }
    }
}


int main()
{
    line x;
cin >> x.x1.x >> x.x1.y >> x.x2.x >> x.x2.y >> x.x3.x >> x.x3.y;
cout << (judge(x) ? "YES" : "NO") << "\n";

    return 0;
    }

检查3点是否共线,它是否正常工作,但是输入 0 0 0 0 0 0 它说NO或崩溃,它适用于1 1 1 1 1 1等。 当我调试它时,它只是在判断时跳过if

3 个答案:

答案 0 :(得分:4)

它不起作用,因为在这一行:

if (x.x1.x == x.x2.x == x.x3.x)

你首先将int编译为int x.x1.x == x.x2.x,然后你用bool编译int bool == x.x3.x.

您必须将这些点与其他点进行比较:

if (x.x1.x == x.x2.x && x.x2.x == x.x3.x && x.x1.x == x.x2.x )

如果你到处改变它应该有效;)

答案 1 :(得分:0)

由于操作priority

a == b == c无法正常工作。它实际上可写入:(a == b) == c,因为==的关联性为left-to-right。第一个(a == b)等于true a=b=c=0c = 0true != c,这就是整个表达失败的原因。请改用if ((a == b) && (a == c))

它在a = b = c = 1时起作用,因为(a == b) = truec = 1,而布尔值true也等于1,所以表达式成功了。

答案 2 :(得分:0)

if (x.x1.y == x.x2.y == x.x3.y)

此设计无法满足您的预期效果。

x.x1.y == x.x2.y == x.x3.yx.x1.y == (x.x2.y == x.x3.y)x.x1.y == (x.x2.y == x.x3.y ? 1 : 0)

相同
if (x.x1.x == x.x2.x && x.x2.x == x.x3.x && x.x1.x == x.x2.x )

是你需要的。