% è l'operatore resto esattamente per come dici tu...
E' comodo da usare in qesto contesto perchè permette di implementare la posizione 'circolare' nell'array senza fare controlli 'strani'...

Immagina un array di 3 posizioni 0 1 e 2. Inizialmente IN=0.

Effettuando sempre IN++ arrivi ad un certo punto che IN avrà un valore al di fuori dell'array (3) e qundi devi fare un controllo eslpicito per riportare IN a 0 del tipo if(IN==3) {IN=0;}

Utilizzando il resto ottieni direttamente il risultato voluto, infatti:
0%3=0 --> IN = 0
1%3=1 --> IN = 1
2%3=2 --> IN = 2
3%3=0 --> IN = 0

Spero di averti fatto capire!!

Ciao