2013-10-25 303 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);