2013-10-25 12 views
6

Sono interessato a ripetere in un elenco in modo tale che possa iniziare in qualsiasi posizione e scorrere l'intera lista risalendo fino alla fine e quindi ricominciando dall'inizio e iterando fino alla posizione di partenza."Circular" per loop in C

Diciamo che voglio fare questo per una serie che è garantita da 4 elementi: array di caratteri [4] = { 'a', 'b', 'c', 'd'}

I ho difficoltà a costruire un ciclo for tale da poter iniziare da 'a', loop abcd, o iniziare da 'b', loop bcda, o iniziare da d, loop dabc, ecc.

Penso la parte iniziale del ciclo for sarebbe qualcosa come i = startingPosition.

Penso che la parte di incremento del ciclo for sarebbe qualcosa come i = (i + 1)% 4. In questo modo, a partire dall'indice 2, ad esempio, salirà a 3, quindi a 0, quindi a 1, ecc.

Che cosa dovrebbe essere la condizione intermedia "di terminazione"?

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

Grazie!

+0

come una coda-testa per un buffer circolare? *** [guarda qui] (http://stackoverflow.com/questions/3882343/suggestions-for-concise-index-handling-in-circular-buffer) *** – ryyker

risposta

15

Uso iterazione normale per il controllo ad anello, quindi regolare l'indice modulo dimensioni:

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

Bello! È così allettante immaginare qualcosa di "intelligente", ma questo separa a mano i due problemi. –

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