if条件在for循环中

时间:2014-02-02 16:32:02

标签: c for-loop

我想根据某些条件执行for循环,具体取决于哪个变量更大。代码就是这样,但我收到错误,我实际上并不知道在for循环中写入short是否合法。

int main()
{
    int Frow=5;
    int Rowi=1;
    int i;int red=2;
    for((Rowi<Frow) ? i=Rowi : i=Frow ;(Rowi<Frow) ? i<Frow : i>Rowi;(Rowi<Frow) ? i++ : i--){
        printf("%i\n",i);
    }
    return 0;
}

所以这个想法是,如果Rowi小于Frow i = Rowi;如果Rowi比较小我再说一次

for(i=Rowi;i<Frow;i++)

如果是另一种方式,for循环应该是

for(i=Frow;i>Rowi;i--)

编辑: 实际上我的逻辑错了,我想要实现的是这个

typedef int Bool;
#define False 0
#define True 1
int main()
{

    Bool pomalko=False;
    Bool increment=False;Bool decrement=False;
    Bool pogolqmo=False;
    int i;int red=2;
    if(Rowi<Frow){
        i=Rowi;pomalko=True;increment=True;
    }
    else if(Frow<Rowi){
        i=Rowi;pogolqmo=True;decrement=True;
    }
    for(i;(pomalko) ? i<Frow : i>Frow;(increment) ? i++ : i--){
        printf("%i\n",i);
    }
    return 0;
}

6 个答案:

答案 0 :(得分:1)

您可以像这样重写它,使用if语句检查RowiFrow的大小:

int main(){
    int Frow=5;
    int Rowi=1;
    int i;int red=2;



    if(Rowi < Frow){ //if rowi is less than frow, use i++
        for(i=Rowi;i<Frow;i++){
            printf("%i\n",i);
        }
    }

     else{ //else, if rowi is greater or equal to frow, use i--
        for(i=Frow;i>Rowi;i--){
            printf("%i\n",i);
        }
    }



    return 0;
}

答案 1 :(得分:0)

而不是

for((Rowi<Frow) ? i=Rowi : i=Frow; ...
在for循环中

,使用:

for(i = (Rowi<Frow) ? Rowi : Frow; ...

无论如何,请考虑使用另一个支持变量来使其更具可读性。

答案 2 :(得分:0)

我认为这不是一个好的风格,但实际的语法问题是:

(Rowi<Frow) ? i=Rowi : i=Frow

应该是

i = (Rowi<Frow) ? Rowi : Frow

答案 3 :(得分:0)

只要正确添加条件,就可以为for循环添加条件:

i=(Rowi<Frow) ? Rowi : Frow ;

答案 4 :(得分:0)

我建议将其简化以使其更具可读性。不要试图在for()循环中挤出额外的功能。您在代码之后给出的描述更有意义。试试这个:

if(Rowi<=Frow){
    for(i=Rowi;i<Frow;i++){
        // TODO
    }
} 
else{
    for(i=Frow;i>Rowi;i--){
        // TODO
    }
}

答案 5 :(得分:0)

这是合法的,但你正试图将一些复杂的逻辑塞进构造中。

如果您以这种方式编写程序,您的程序将更容易编写并更容易调试:

int main(){
  int Frow=5;
  int Rowi=1;
  int i;
  int red=2;
  i=(Rowi<Frow)?Rowi:Frow;
  while( (Rowi<Frow && i<Frow) || (Rowi>=Frow && i>Rowi)){
    printf("%i\n",i);
    if(Rowi<Frow)
      i++;
    else
      i--;
    //Alternatively: i+=(Rowi<Frow)?1:-1;
  }
  return 0;
}

从那里,您可以进一步简化代码:

if(Rowi<=Frow){
  for(i=Rowi;i<Frow;i++){
    // TODO
  }
} else {
  for(i=Frow;i>Rowi;i--){
    // TODO
  }
}

请记住,紧凑代码通常不会导致执行速度加快,但几乎总会导致思维变慢。

相关问题