He usado la búsqueda pero no he encontrado la solución, así que recurro a vosotros.
Es para una práctica. En clase usamos un HP-UX y me va bien, pero en mi casa (Linux normalillo) parece que los fflush(stdin) no hacen nada.
Por ejemplo, el siguiente código:
printf("Nombre del fichero: ");
scanf("%s", cad);
fflush(stdin);
do{
printf("Modo (LECT/ESCR): ");
fgets(mod, 5, stdin);
fflush(stdin);
} while (strcmp(mod,"LECT")!=0 && strcmp(mod,"ESCR")!=0);
En la universidad, el resultado sería:
Nombre del fichero: datos.dat
Modo (LECT/ESCR): LECT
Y mostraría el menú en espera de elegir una opción.
Pero en mi linux resulta:
Nombre del fichero: datos.dat
Modo (LECT/ESCR): Modo (LECT/ESCR): LECT
Y después me muestra el menú 2 veces ya que el fflush no ha vaciado la entrada y se introduce una opción no válida.
Me sucede todas las veces que pido entrada por stdin y los recojo ya sea con scanf, fgets u otros y, después, hago un fflush(stdin).
No entiendo muy bien cuál puede ser el problema. He probado a cambiar de terminal y nada, gnome-terminal, xterm, etc..
He estado buscando y he leído algo acerca de fpurge, pero también que "Linux may not support fpurge." y está en lo cierto, no está en stdio.h.
En fin, a ver si me podéis ayudar, me estoy volviendo mono con esto y no puedo avanzar las prácticas en mi casa y son muy largas.
Un saludo.
Edito:
Me olvidaba, una forma en que funciona es sustituir los fflush(stdin) por "while(getchar()!='\n');", pero no me parece la forma más adecuada y no sé si funcionaría también en el HP-UX, aunque si no hay otra, podría reemplazar el código sólo en mi casa, bendito "buscar y reemplazar".