C中循环的"循环"

use*_*499 7 c for-loop circular-list

我有兴趣以这样的方式迭代列表,我可以从任何位置开始并遍历整个列表,直到最后,然后循环回到开头并迭代到起始位置.

让我们说我想为一个保证4个元素的数组做这个:char array [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)
Run Code Online (Sandbox Code Playgroud)

谢谢!

Bar*_*mar 16

使用正常迭代进行循环控制,然后以大小调整索引模数:

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


Dav*_*rtz 5

i = startingPosition;
do
{
    // use 'i' here
    i = (i + 1) % size;
} while (i != startingPosition);
Run Code Online (Sandbox Code Playgroud)