2

我记得在 C 中看到过一个非常优雅的“for”循环结构,它会根据初始值是大于还是小于结束条件值自动增加或减少循环变量。

换句话说,是这样的:

fadeUpDown(startVal, stopVal /*, stepSize */ ) {      

    // SOME CODE THAT SETS UP WHETHER TO INCREMENT OR DECREMENT

    for (int i=startVal ; i != stopVal ; ### SOME TRICKY CODE ### ) {    
        // The actual looped code      
    }
}

再次搜索此代码后,我没有成功,所以我在这里,询问是否有人可以帮助我。

编辑:我们在这里都是整数。
StopVal 的完整性检查是 StepSize 的整数增量/减量超出范围。
实际上,让我们跳过 StepSize 并将其设为 1

4

5 回答 5

5

眼镜蛇,例如简单的方法:

int inc=startVal>stopVal?-1:1;
for (int i=startVal ; i != stopVal ; i+=inc ) {
于 2012-11-05T16:34:09.397 回答
2

不确定这需要多么棘手,应该像以下那样简单:

for(int i = startVal; i != stopVal; i < stopVal ? i += stepSize : i -= stepSize)
{
}

请注意,这假设stopVal是从 开始的整数stepSizestartVal。如果这不是真的,它会超调。

当然也可以防止这种情况发生,但它变得有点笨拙:

for(int i = startVal;
    stopVal > startVal ? i < stopVal : i > stopVal;
    i < stopVal ? i += stepSize : i -= stepSize)
{
}
于 2012-11-05T16:33:46.433 回答
1
for (int i=startVal ; i != stopVal ;  i += (stepsize*(startVal > stopVal? -1 : 1))) 
于 2012-11-05T16:35:47.977 回答
1

您可以执行以下操作:

fadeUpDown(startVal, stopVal, stepSize) {      

    // SOME CODE THAT SETS UP WHETHER TO INCREMENT OR DECREMENT

    for (int i=startVal ; i != stopVal ; i += (startVal < stopVal) ? stepSize : -stepSize ) {    
        // The actual looped code      
    }
}

但是从for某种意义上说,循环相当脆弱,stopVal最好恰好在stepSize增量/减量上,否则您的循环将无法正确终止。

于 2012-11-05T16:39:17.773 回答
1

也许这与 stepSize 参数一起工作

fadeUpDown(startVal, stopVal, stepSize) {      

        for (int i=startVal, j = (startVal < stopVal); (j) ? (i < stopVal) : (i > stopVal) ; i += (j) ? stepSize : -stepSize ) {    
            // The actual looped code      
        }
}
于 2012-11-05T16:56:02.273 回答