将if语句更改为while语句

时间:2015-08-04 18:00:26

标签: c

我正在尝试将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;操作

总代码似乎我花了很少的精力,减少投票。所以我发布的代码有点像伪代码。

3 个答案:

答案 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();
        }

    }
}