El fflush(stdin) tenes que ponerlo despues del scanf para que limpie el buffer, en este caso por ejemplo cuando te ponen una letra y entonces por eso sigue repitiendo el ciclo, limpiando el buffer ya no pasa.
Diferencias de criterio, yo lo haria asi:
Código:
for (;;)
{
if ( (scanf("%d", &variable) == 1) && (variable >= 0) && (variable <= 9) ) { break; }
puts("El rango valido es solo de 0 a 9.");
printf("Introduce un numero: ");
fflush(stdin);
}