Buenas, respecto al tema de fflush(stdin) es algo que NUNCA se debe usar, es algo propio de windows, por tanto no es multiplataforma. De hecho la funcion fflush() solo se deberia usar para flujos de salida=> fflush(stdout)
Sobre como remediarlo, bueno aqui llegamos al problema que hay en C cuando se trabaja por consola y es que es algo que se quiere enseñar muy pronto cuando casi no conoces el lenguaje para empezar a hacer programas basicos, pero antes deberías aprender muchas cosas.
De hecho, "no hay necesidad" de limpiar el buffer de entrada si se usan las funciones correctas, es decir si uno usa => fgets() para las cadenas y luego fgets() y sscanf() para los numeros, pero como es algo que puede parecer raro para los principiantes no se enseña y eso es un problema.
Alternativas que hagan lo mismo que el fflush(stdin), pues hay una sencilla que es hacer un bucle, puedes hasta hacer tu propia funcion si quieres:
Saludos