TI HO DETTO che la while fa quello che fa la if, quindi il controllo lo fa la while.
Il codice con la if non ti ho detto che non va bene, non te l'ho mai detto. Ti ho detto che si può evitare di ripetere la if perché quel lavoro lo fa la while. E' un modo per migliorare il codice, per ottimizzarlo e per imparare a scrivere bene i programmi.
Comunque, se non risolvi, lascia perdere e passa ad altro.