Tomazi
Tomazi

Reputation: 781

Breaking out of if statement

I am writing a program in which I use an if statement to check some condition; if true I increment a counter. The problem is that as soon as the statement is true the variable either gets incremented endlessly or by random number.

I have been trying to use some clause to break out of this statement if condition meet but with no luck

my code:

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;
  }
}

The whole chunk of code associated with the issue:

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;
                                }
                            }




                        }

                    }
            }
        }

    }

Hope this helps guys ps. left_hook_count++; is a int variable declared on top of my main().

Upvotes: 0

Views: 3926

Answers (5)

user3015682
user3015682

Reputation: 1255

my new answer:

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

my old answer: Replace the if statement with a while statement containing a unconditional break at the end. (old answer was before I learned of attaching labels to statement blocks.)

In your case:

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
}

However if you don't have code after the conditional break what's the point of having it? I'm assuming you've omitted that code? The way you wrote it it would simply break out of the inner for loop.

Upvotes: 0

decden
decden

Reputation: 719

You can just negate the condition, instead of trying to break out of the if:

if(...) {
   if(!left_hook_count++) {
      // Do what you need to do
   }
}

Upvotes: 0

Pete Becker
Pete Becker

Reputation: 76245

Don't compare left_hook_count++ to true. In this context, true is equal to 1, and once left_hook_count exceeds 1, this test will fail and the code will never hit the break.

And you don't break out of an if statement. You break out of a loop; a break in an if statement inside the loop is one way of doing this.

Upvotes: 0

Mike Seymour
Mike Seymour

Reputation: 254431

The best solution is probably to invert the test, and make all the rest of the outer if conditional:

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

You could get the program flow you want using goto with a label after the outer if, but you don't want to.

On the other hand, it sounds like perhaps this is in a loop, and you don't want to enter the if block at all if the counter has been incremented? In that case you want:

if (left_hook_count == 0 && whatever) {
    // do some stuff
}

Upvotes: 1

Dineshkumar
Dineshkumar

Reputation: 4245

you could provide more details so that we can figure out whats happening.

You might not have initialized it? and checking again

if(left_hook_count++ == true) 

it will increment it again unneccessariy and for for first count (0 : it wont happen)

i guess you 're using some recursive function. so check for Break condition (all test cases too).

Upvotes: 0

Related Questions