C++ 中断if语句

C++ 中断if语句,c++,C++,我正在编写一个程序,其中我使用if语句来检查某些条件;如果为真,我增加一个计数器。问题在于,一旦该语句为真,变量要么无限递增,要么以随机数递增 我一直试图用一些条款来打破这种说法,如果条件满足,但没有运气 我的代码: if(res_vect_angle >=60 && res_vect_angle <=100 && left_mag_b >100) { //line(drawing, *iter_s, *(iter_s -1), Scal

我正在编写一个程序,其中我使用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;
  }
}
if(分辨率向量角度>=60和分辨率向量角度100)
{
//线(图,*iter_s,*(iter_s-1),标量(255,255,255),2,8);
左钩子计数++;
coutx+(iter_s-2)->x,2);
M2=功率((双)国际热核聚变实验堆->y+(国际热核聚变实验堆-2)->y,2);
左磁势a=(M1+M2);
左磁图b=sqrt(左磁图a);
//合成角
A1=abs(国际热核聚变实验堆->x-(国际热核聚变实验堆-2)->x);
A2=abs(iter\u-s->y-(iter\u-2)->y);
res矢量角=abs(atan2(A1,A2)*180/PI);

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

if (whatever) {
    // do some stuff
    if (left_hook_count != true) { // or whatever the test should really be
        // do some more stuff
    }
}
您可以使用
goto
,在外部
if
后面加上标签,获得所需的程序流,但是

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

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

您可以直接否定该条件,而不是试图突破以下条件:

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

你可以提供更多的细节,这样我们就能知道发生了什么

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

if(left_hook_count++ == true) 
第一次计数时,它将不必要地再次递增(0:不会发生)


我猜您正在使用一些递归函数。因此,检查中断条件(也检查所有测试用例)。

不要将
左钩子计数+++
进行比较。在此上下文中,
等于1,并且一旦
左钩子计数
超过1,此测试将失败,代码将永远不会命中
中断

你不需要中断if语句。你需要中断一个循环;
if
语句中的
break
循环是一种方法。

我的新答案:

:mylabel if (some_condition)
{
  //code
  if (some_condition) {break mylabel;}
  //code
}
我以前的答案是:用一个while语句替换if语句,该语句在末尾包含一个无条件中断。 (以前的答案是在我学会给语句块贴标签之前。)

就你而言:

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
}
while(分辨率向量角度>=60和分辨率向量角度100)
{
//线(图,*iter_s,*(iter_s-1),标量(255,255,255),2,8);
左钩子计数++;

是否有
左钩子计数
已初始化?
无休止地
?是否有循环?是否也可以发布该代码?什么是
左钩子计数
的类型?如果它不是布尔类型,则将其与
比较,检查它是否等于1,而不是不等于0。因此,如果它的值为2,则没有任何内容哇!这是怎么回事?哇!这是怎么回事?你在比较<代码>左ToHookoCuth[/Cord] >反对<代码>真< /代码>然后递增它?你是否意识到C++中的任何非零值都被计算成<代码>真< /代码>?我将把它与绝对值进行比较,比如1或5,甚至<代码>=0 < <代码>,至少为了清楚起见,f没有别的。很少需要比较布尔值:你会得到另一个布尔值!不要说
x==true
,说just
x
;不要说
x==false
,说just
!x
。其他形式,
x!=true
x!=false
,留给读者作为练习。@ALOToverflow:谢谢,这是我的建议。@ALOToverflow这正是我要寻找的。反对“goto”
的论点很糟糕;-)@Walter:事实上,这是使用它不太可能的结果。不使用它的最好理由是,如果你不使用它,你就不需要争论为什么要使用它。谢谢你的重播……你将如何实现你对我的代码的解决方案?Regards@Tomazi-我不知道您实际的循环终止条件是什么,我也不打算费力地阅读所有代码来试图找出它。很明显,当前的测试没有意义。除此之外,您必须清楚地说明应该终止循环的条件,然后编写代码。
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
}