0

我正在编写一个程序,在该程序中我使用 if 语句来检查某些条件;如果为真,我会增加一个计数器。问题是,一旦声明为真,变量要么无限地递增,要么随机数递增。

如果条件满足但没有运气,我一直在尝试使用一些子句来打破这个陈述

我的代码:

if(res_vect_angle >=60 && res_vect_angle <=100 && left_mag_b >100)
{

  //line(drawing, *iter_s, *(iter_s -1),  Scalar( 255, 255, 255 ), 2,8 );
  left_hook_count++;
  cout<<"Left Hook:..........................!!! "<<left_hook_count<<endl;

  if(left_hook_count++ == true)
  {
    break;
  }
}

与问题相关的整个代码块:

float M1, M2;
float A1, A2;
double left_mag_a, left_mag_b;
double res_vect_angle;

int i = 0;

    for(vector<Point>::iterator iter_lh = Leftarm.begin(); iter_lh != Leftarm.end(); ++iter_lh)     
    {       
        if(iter_lh->y <=240 && iter_lh->y >=60 && iter_lh->x >=340 && iter_lh->x <=680)
        {
            left_detect.push_back(*iter_lh);

            if(i % 4 == 0)
            {
                if(left_detect.size()>4)
                    {
                        for(vector<Point>::iterator iter_s = left_detect.begin()+3; iter_s != left_detect.end(); ++iter_s, i++)
                        {
                            //Resultant Magnetude
                            M1 = pow((double) iter_s->x + (iter_s -2)->x,2);
                            M2 = pow((double) iter_s->y + (iter_s -2)->y,2);

                            left_mag_a = (M1 + M2);

                            left_mag_b = sqrt(left_mag_a);

                            //Resultant Angle
                            A1 = abs(iter_s->x - (iter_s -2)->x);
                            A2 = abs(iter_s->y - (iter_s -2)->y);

                            res_vect_angle = abs(atan2(A1,A2) * 180 /PI);
                            //cout<<"LEFT HOOK ANGLE IS: "<<res_vect_angle<<endl;                           




                            if(res_vect_angle >=60 && res_vect_angle <=100 && left_mag_b >100)
                            {

                                //line(drawing, *iter_s, *(iter_s -1),  Scalar( 255, 255, 255 ), 2,8 );
                                left_hook_count++;
                                cout<<"Left Hook:..........................!!! "<<left_hook_count<<endl;

                                if(left_hook_count++ == true)
                                {
                                    break;
                                }
                            }




                        }

                    }
            }
        }

    }

希望这对大家有帮助。left_hook_count++;是在我的 main() 之上声明的 int 变量。

4

5 回答 5

1

最好的解决方案可能是反转测试,并使所有其余的外部if条件:

if (whatever) {
    // do some stuff
    if (left_hook_count != true) { // or whatever the test should really be
        // do some more stuff
    }
}

您可以在gotoexternal 之后使用标签获得想要使用的程序流程if,但您不想这样做

另一方面,听起来这可能是在一个循环中,if如果计数器已增加,您根本不想进入该块?在这种情况下,您想要:

if (left_hook_count == 0 && whatever) {
    // do some stuff
}
于 2013-05-10T16:00:36.050 回答
0

不要left_hook_count++比较true。在这种情况下,true等于 1,一旦left_hook_count超过 1,此测试将失败,代码将永远不会命中break.

而且您不会跳出 if 语句。你跳出一个循环;break循环内的语句中的aif是执行此操作的一种方法。

于 2013-05-10T16:09:54.927 回答
0

您可以提供更多详细信息,以便我们弄清楚发生了什么。

你可能没有初始化它?并再次检查

if(left_hook_count++ == true) 

它将再次不必要地增加它,并且对于第一次计数(0:它不会发生)

我猜你正在使用一些递归函数。所以检查中断条件(所有测试用例也是)。

于 2013-05-10T16:04:41.587 回答
0

您可以否定条件,而不是尝试突破if:

if(...) {
   if(!left_hook_count++) {
      // Do what you need to do
   }
}
于 2013-05-10T16:01:24.303 回答
0

我的新答案:

:mylabel if (some_condition)
{
  //code
  if (some_condition) {break mylabel;}
  //code
}

我的旧答案:将 if 语句替换为最后包含无条件中断的 while 语句。(旧答案是在我学会将标签附加到语句块之前。)

在你的情况下:

while(res_vect_angle >=60 && res_vect_angle <=100 && left_mag_b >100)
{

    //line(drawing, *iter_s, *(iter_s -1),  Scalar( 255, 255, 255 ), 2,8 );
    left_hook_count++;
    cout<<"Left Hook:..........................!!! "<<left_hook_count<<endl;

    if(left_hook_count++ == true)
    {
        break;
    }
    break; //this unconditional break makes the while loop act as an if statement
}

但是,如果您在条件中断之后没有代码,那么拥有它有什么意义呢?我假设您省略了该代码?您编写它的方式会简单地跳出内部 for 循环。

于 2013-11-21T04:36:29.837 回答