C++ 中断if语句
我正在编写一个程序,其中我使用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(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
,说justx
;不要说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
}