【发布时间】:2020-10-26 00:36:08
【问题描述】:
我正在创建一个函数,该函数从两行输入中获取截距并将其显示为一个点。它大部分时间都有效,但是当没有交叉点(线平行)时,我(-inf,-inf)。我试图让该功能改为打印“错误”。这是我尝试过的,但它仍然返回相同的东西。
Point getIntercept (Line a, Line b) {
Point intercept;
if (a.m == b.m) {
printf("Error");
} else {
double x = (a.b - b.b) / (b.m - a.m); //solves for x
double y = a.m * x + a.b; //plugs in for y
intercept.x = x;
intercept.y = y;
return intercept;
}
}
【问题讨论】:
-
那么在你打印
Error之后,return的作用是什么? -
我还想知道输出是否是行缓冲的,并且因为您没有写换行符,所以您可能还没有看到打印的
Error。无论如何,如上所述,在这种情况下,您当然需要一个适当的返回值。 -
@KamilCuk 它打印与没有 if 语句时相同的内容,这意味着如果有一个则打印一个截距,如果没有则打印 (-inf, -inf)
-
@BepisKid 你看到的是未定义的行为,如果没有的话。不要依赖它。如果您打开编译器警告,您可能会看到类似“控制到达非无效函数的结尾”之类的内容。决定在没有拦截时使用的返回值,并返回它(然后在调用者中测试它)。
-
你的算法是错误的。如果您想知道这些线是否平行,请测试
a.m == b.m,然后在在函数的第二行除以零之前执行此操作!