Ciao,
Devi studiarti bene la logica che vuoi dare al programma...
Hai spostato il problema fuori dallo switch, ma la cosa si ripresenta, come hai notato, non appena i diventa maggiore di reader (dopo un tot di iterazioni ottieni, come prima, un ciclo while con dentro una condizione sempre falsa).
Spostare un incremento a caso non ha molto senso... la cosa deve essere studiata in base al comportamento che deve avere il programma.
Probabilmente è errato usare i per il confronto con reader (è un'ipotesi), o comunque mantenere nello switch la condizione di terminazione e la if com'è adesso (immagino che l'interruzione del ciclo while dipenda in qualche modod da uno dei case). Altrimenti si può pensare ad un else che fa qualcosa quando la condizione diventa falsa (esce dal ciclo while o altro).
Insomma, le soluzioni possono essere tante, ma tutte legate alla specifica implementazione e al comportamento che vuoi ottenere nel tuo codice. Se hai ben chiaro quello che deve succedere prova a ripensare il tutto in modo che le condizioni non si intersechino... cerca di avere ben chiaro cosa deve far terminare il ciclo e cosa implichi l'if (supponiamo che quando i<reader tu gestisci lo switch... la domanda giusta da farsi è: cos'è i? A cosa serve o cosa indica? E quando i diventa maggiore di reader cosa deve succedere a livello logico?)
Ciaociao