-5
 if (cross(s, t))>>0{
  printf("turns to the left\n");
} else if (cross(s, t))==0{
  printf("points are co-linear\n");
} else (cross(s, t))<<0 {
  printf("turns to the right\n");
}

我之前已经声明了交叉函数,任何帮助都会很棒!

4

5 回答 5

2

假设cross返回int,您的条件中的右括号位于错误的位置

if (cross(s, t))>>0{

应该

if (cross(s, t)>>0){
//                ^

等等

此外,正如 Jeff Mercado 所指出的,如果您想测试小于/等于/大于零,您应该分别使用<, 。==>

使用>><<执行按位移位;这会留下一个位移零位的测试,然后对任何非零答案返回真。这大概不是你想要的。

于 2013-11-01T17:51:11.583 回答
1

if语句如下所示:

if(condition) {
}

你的是:

if condition {
}

您需要替换括号:

if (cross(s, t)>>0)

查看您的代码..看起来您可能想要一个

if(cross(s,t) > 0)

>>被称为位移,它可能不是您想要的。

于 2013-11-01T17:52:17.010 回答
0

您不希望 '>>' 和 '<<' 是位移操作。你想要 '<' 和 '>' :

if (cross(s, t)>0){
  printf("turns to the left\n");
} else if (cross(s, t))==0{
  printf("points are co-linear\n");
} else (cross(s, t)<0) {
  printf("turns to the right\n");
}

请注意,括号也必须围绕整个表达式

于 2013-11-01T17:51:16.293 回答
0

if 语句的格式为

if ( _condition-expression_ ) _expression_

您的条件表达式最接近匹配

_condition-expression_ <==> cross(s, t)

并且 the>>0{不是表达式的有效开头。要解决此问题,您需要

_condition-expression_ <==> cross(s, t) > 0

这将使 if 语句类似于

if (cross(s, t) > 0) {
  ...
}
于 2013-11-01T17:52:10.063 回答
0

如果要检查左操作数是否高于或低于右操作数,请仅使用单个 > 或 <,双 << 和 >> 是按位运算符

于 2013-11-01T17:52:15.737 回答