我正在尝试将if语句更改为while语句。
例如
int A=1; if(A==1){};
类似于int A=1 while(A!=1)
。
我的If语句没有代码,我只需要它就什么也不做,以避免使用else-if语句。
我的If语句位于1 While语句和1 If语句中。 所以我希望程序在while语句中执行相同的操作,而不是使用带有没有代码的If语句的1语句和1 If语句。
原始代码类似
while(C1)
{
if(C2)
{
if( h->data[temp] < h->data[temp*2] && h->data[temp] < h->data[temp*2+1] )
{
break;
}
else if(C4)
{
DO();
}
}
}
我已将其更改为
while( C1 && h->data[temp] > h->data[temp*2] && h->data[temp] > h->data[temp*2+1] )
{
if(C2)
{
if(C4)
{
DO();
}
}
}
结果不同。原始代码给出了正确的结果,但更改的代码给出了错误的结果。我只是将位置改为if而while也改变了&lt;的方向。运营商到&gt;操作
总代码似乎我花了很少的精力,减少投票。所以我发布的代码有点像伪代码。
答案 0 :(得分:0)
在原始代码中,如果(例如)h->data[temp]>h->data[temp*2]
为false,则DO()
将无法执行,但循环将继续。在新版本中,循环将停止。
答案 1 :(得分:0)
例如int A = 1;如果(A == 1){};类似于int A = 1而(A!= 1)。
如前所述,你的循环正在破裂。以上陈述也是错误的。
int a = 1;
if(a == 1) {} //this is true, and will happen once
BUT
int a = 1;
while(a != 1) {} //false on entry, skip loop ( never entered )
如果可以隔离条件,也可以考虑开关/案例。 这可能会实现删除ifs的目标,并使代码更具可读性。
e.g
int a = 1;
while(a)
{
switch(a)
{
case 1: ++a; continue;
case 2: do();
default: break; //end loop
}
}
答案 2 :(得分:0)
正如其他人所说,没有理由用额外的声明来混淆代码;原件很清楚。您的原始版本中也不需要else
:
while(C1)
{
if(C2)
{
if( h->data[temp] < h->data[temp*2] && h->data[temp] < h->data[temp*2+1] )
{
break;
}
if(C4)
{
DO();
}
}
}