Il problema è il ; finale. Se lo metti, quel while diventa una unica istruzione. Di conseguenza se la condizione diventa vera, il programma ciclerà all'infinito.