2013-10-25 301 views
6

我有興趣在列表中迭代,以便我可以從任何位置開始並遍歷整個列表,然後循環回到開始位置並迭代到起始位置。「循環」for循環在C

讓我們說我希望爲保證4個元素的數組做到這一點: char數組[4] = { 'A', 'B', 'C', 'd'}

我難以構建for循環,以至於我可以從'a'開始,循環abcd,或者從'b'開始,循環bcda,或者從d開始,並且循環dabc等。

我認爲for循環的最初部分就像i = startingPosition。

我認爲for循環的增量部分會像i =(i + 1)%4那樣。例如,從索引2開始,將上升到3,然後是0,然後是1,等等。

中間的「終止」條件是什麼?

for(i = startingPosition; ???; i = (i+1)%4) 

謝謝!

+0

像尾頭爲一個循環緩衝器? *** [看這裏](http://stackoverflow.com/questions/3882343/suggestions-for-concise-index-handling-in-circular-buffer)*** – ryyker

回答

15

使用用於閉環控制正常迭代中,然後調整指數模尺寸:

for (i = 0; i < size; i++) { 
    int index = (i + startingPosition) % size; 
    // Do stuff with array[index] 
} 
+0

不錯!找出「聰明」的東西是很誘人的,但這很容易將兩個問題分開。 –

4
i = startingPosition; 
do 
{ 
    // use 'i' here 
    i = (i + 1) % size; 
} while (i != startingPosition);