0

if ステートメントを使用して条件をチェックするプログラムを作成しています。true の場合、カウンターをインクリメントします。問題は、ステートメントが真になるとすぐに、変数が際限なく、または乱数によってインクリメントされることです。

条件が満たされた場合、このステートメントから抜け出すためにいくつかの句を使用しようとしましたが、運がありませんでした

私のコード:

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

0

何が起こっているのかを把握できるように、詳細を提供してください。

もしかして初期化してない?そして再チェック

if(left_hook_count++ == true) 

不必要に再度インクリメントし、最初のカウントに対して(0:発生しません)

再帰関数を使用していると思います。そのため、Break 条件を確認してください (すべてのテスト ケースも)。

于 2013-05-10T16:04:41.587 に答える
0

left_hook_count++と比較しないでくださいtrue。このコンテキストでtrueは、 は 1 に等しく、一度 1left_hook_countを超えると、このテストは失敗し、コードはbreak.

また、if ステートメントから抜け出すことはありません。ループから抜け出します。breakループ内のifステートメントの aは、これを行う 1 つの方法です。

于 2013-05-10T16:09:54.927 に答える
0

ifから抜け出そとする代わりに、条件を否定することができます。

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