Beler ha scritto:
while(flag=true);
Questo è il punto sbagliato. Perché quel flag=true è un
assegnamento, non un test per uguaglianza. Ed è accettato dal compilatore (incidentalmente, come caso assolutamente particolare) solo perché è l'assegnamento di un boolean. Quindi true viene assegnato a flag
E allo stesso tempo il risultato complessivo della espressione è ovviamente true, che rende il ciclo sempre "vero".
Semplicemente:
while(flag==true);
o ancora più abbreviato
while(flag);