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      
    }
}

このコードをもう一度かなり検索しましたが、成功しませんでした。

編集:ここではすべて整数です。
StepSize の整数のインクリメント/デクリメントである StopVal のサニティ チェックは範囲外です。実際には、 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これは、 が からの整数のstepSizeステップ数であると仮定していることに注意してくださいstartVal。そうでない場合は、オーバーシュートします。

もちろん、それを防ぐこともできますが、少し扱いに​​くくなります:

for(int i = startVal;
    stopVal > startVal ? i < stopVal : i > stopVal;
    i < stopVal ? i += stepSize : i -= stepSize)
{
}
于 2012-11-05T16:33:46.433 に答える
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という意味でかなり脆弱です。そうしないと、ループが適切に終了しません。stopValstepSize

于 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 に答える
1
for (int i=startVal ; i != stopVal ;  i += (stepsize*(startVal > stopVal? -1 : 1))) 
于 2012-11-05T16:35:47.977 に答える