Bueno, primero de todo decir que lo he hecho así para respetar el enunciado del problema, que especifica que debe ser una estructura "while". El programa funciona y da un resultado correcto.
Efectivamente, como tu bien apuntas el "break" no solo salta la ejecución de "else", sino que sale del bucle directamente. (lo he comprobado con el debugger). Con lo cual, básicamente solo comprueba que la entrada es distinta de -1 y continua, pero cuando es igual a -1 se encarga el break de salir del bucle y no se utiliza la comparación del while. Sigue siendo necesario para los casos en que se introducen valores validos para los cálculos.
Ya me parecía a mi que la doble comparación no era una "lógica de programación" demasiado elegante, pero la verdad es que, respetando el enunciado, no se me ocurría mejor forma de hacerlo, ya había pensado en el "do... while" pero no quise utilizarlo por lo que comento de respetar el enunciado, ya que es un ejercicio y hay que ceñirse a lo que indica.
en cualquier caso con do while me parece mas elegante y mejor planteado, pero me gustaría saber si hay mas sugerencias utilizando únicamente while
Un saludo,
Nacho