cuál es el uso de fflush (stdin) en la progtwigción c

Tengo el siguiente progtwig

#include  #include  int main() { char ans[8]; int i; for(i=1;i<=3;i++) { printf("\n What is the unit of traffic ?"); scanf("%s",ans); fflush(stdin); if(stricmp(ans,"Earlang")==0) { printf("\nAnswer is correct"); exit(1); } else if(i<3) printf("\n Try Again!\n"); } printf("\n Nunit of traffic is Earlang:"); } 

¿Cuál es el uso de fflush (stdin) en este progtwig?

No está en el estándar C, por lo que el comportamiento no está definido.

Algunas implementaciones lo usan para borrar el buffer stdin .

Desde C11 7.21.5.2 La función fflush , fflush solo funciona con flujo de salida / actualización, no flujo de entrada.

Si la ruta apunta a una secuencia de salida o una secuencia de actualización en la que no se ingresó la operación más reciente, la función fflush hace que todos los datos no escritos para esa transmisión sean entregados al entorno de la computadora principal para ser escritos en el archivo; de lo contrario, el comportamiento no está definido.

borra el buffer stdin antes de leer. Desde la página man:

Para flujos de salida, fflush () fuerza una escritura de todos los datos almacenados en el espacio de usuario para la salida o stream de actualización dada a través de la función de escritura subyacente de la secuencia. Para flujos de entrada, fflush () descarta cualquier información almacenada en el búfer que se haya extraído del archivo subyacente, pero no ha sido consumida por la aplicación.

Nota: Esto es específico de Linux, el uso de fflush() en las secuencias de entrada no está definido por el estándar, sin embargo, la mayoría de las implementaciones se comportan igual que en Linux.

Es una forma pocoportable de eliminar todos los datos del búfer de entrada hasta la próxima nueva línea. Lo he visto usado en casos como ese:

 char c; char s[32]; puts("Type a char"); c=getchar(); fflush(stdin); puts("Type a string"); fgets(s,32,stdin); 

Sin el fflush() , si escribe un carácter, diga “a”, y el hit ingrese, el buffer de entrada contiene “a \ n”, el getchar() mira hacia la “a”, pero el “\ n” permanece en el búfer, por lo que los próximos fgets() lo encontrarán y devolverán una cadena vacía sin siquiera esperar la entrada del usuario.

Sin embargo, tenga en cuenta que este uso de fflush() es poco práctico. Lo he probado ahora en una máquina Linux, y no funciona, por ejemplo.