我想根据某些条件执行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;
}
答案 0 :(得分:1)
您可以像这样重写它,使用if语句检查Rowi
和Frow
的大小:
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
}
}
请记住,紧凑代码通常不会导致执行速度加快,但几乎总会导致思维变慢。