脱离if语句
Breaking out of if statement
我正在写一个程序,在这个程序中我使用if语句来检查一些条件;如果为true,则增加一个计数器。问题是,一旦语句为真,变量要么无限递增,要么以随机数递增。
我一直在尝试使用一些子句来打破这个语句,如果条件满足,但没有运气
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;
}
}
与问题相关的整个代码块:
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;
}
}
}
}
}
}
}
希望这对大家有帮助ps. left_hook_count++;
是一个int变量声明在我的main()之上。
最好的解决方案可能是反转测试,并使外部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(left_hook_count++ == true)
它会在不必要的情况下再次增加它,对于第一次计数(0:它不会发生)
我猜你用的是递归函数。所以检查Break条件(所有的测试用例也是)。
不要比较left_hook_count++
和true
。在此上下文中,true
等于1,一旦left_hook_count
超过1,该测试将失败,代码将永远不会到达break
。
并且你不会跳出if语句。你跳出一个循环;在循环内的if
语句中添加break
是实现此目的的一种方法。
您可以直接否定条件,而不是试图脱离if:
的if(...) {
if(!left_hook_count++) {
// Do what you need to do
}
}
我的新答案:
: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循环
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 我似乎对if/else的基本语句有问题:/
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- c++:定义if语句中的模板
- C++嵌套的 If 语句中,它无法按预期工作
- 如果中的多个语句是否与多个 if 相同?
- C++ If/Else 语句被跳过
- 使用语句if时逻辑的问题
- 如何添加语句if-else
- 如何将语句if(isalpha(c))从c++转换为MIPS ?
- 在if语句if C++中创建对象时出现作用域问题
- if语句-if/else和参数放置C++