No creo que sea buena idea incitar a la gente que está empezando a programar a usar bucles sin condición de los que se saldrá mediante breaks, no es una buena práctica.
Yo te animo a que intentes hacer un bucle con condición y te olvides del break.
Mas que una mala practica es una cuestión de estilos.
Una opción es utilizar un bucle con una salida al medio con la ventaja del mínimo de expresiones:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int num;
int rv;
int ch;
while (1){
printf("Introduce un numero (1 .. 9): "); if ((rv
= scanf("%d", &num
)) == EOF
) return EXIT_FAILURE;
else
while ((ch
= getchar()) != EOF
&& ch
!= '\n') ;
if (rv == 1 && num >= 1 && num <= 9)
break;
puts("Entrada no valida"); }
return EXIT_SUCCESS;
}
Otra es un bucle "while ..." o "do ... while" con expresiones repetidas:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int num;
int rv;
int ch;
int ok;
do {
printf("Introduce un numero (1 .. 9): "); if ((rv
= scanf("%d", &num
)) == EOF
) return EXIT_FAILURE;
else
while ((ch
= getchar()) != EOF
&& ch
!= '\n') ;
ok = rv == 1 && num >= 1 && num <= 9;
if (!ok)
puts("Entrada no valida"); }while (!ok);
return EXIT_SUCCESS;
}
Una tercera es colocar toda la operación (en este caso lectura) en una función, mas o menos así:
while ((rv = fn(...)) == 0){
/* Entrada no valida o fuera de rango */
}
if (rv == EOF){
/* Error critico */
}
/* ... (OK) */
----
P.D: Juraito, juraito que el código está bien indentado, pero no sé que pasa últimamente que al ponerlo en las Code se "desparrama".
Eso se debe a que en tu editor de texto estas indentando el código fuente con tabuladores en vez de espacios.
Un saludo