Reemplazo de fflush (stdin)

Tengo el siguiente código,

fflush(stdin); print("Enter y/n"); scanf("%c",&a); 

Aquí, se está cerrando antes de dar el input.it parece que el problema es porque no está vaciando el búfer de entrada que podría tener algunos caracteres no deseados. Hay alguna alternativa para el vaciado (stdin). Este fragmento de código está funcionando en Solaris Pero no está funcionando en Linux.

Esto está bien explicado en la C Preguntas frecuentes . Ver también: explicación . Las soluciones propuestas:

  • Deje de usar scanf. Usa fgets y el sscanf
  • Usa esto para comer la nueva línea.

     while((c = getchar()) != '\n' && c != EOF) /* discard the character */; 

El hecho de que flushing stdin funcione en algunas implementaciones es erróneo .

Algunos proveedores implementan fflush para que fflush (stdin) descarte los caracteres no leídos, aunque los progtwigs portátiles no pueden depender de esto.

Para C en GNU

puedes usar


 __fpurge(stdin); 

Incluye el encabezado stdio_ext.h para acceder a la función. Aunque la publicación es muy antigua todavía, pensé que esto podría ayudar a algunos desarrolladores de Linux.

 scanf(" %c",&c); 

o

 scanf(" "); //reading operation (gets(), fgets(stdin,...) etc) 

Los espacios en la cadena de formato scanf () ignorarán cualquier espacio en blanco hasta el primer espacio en blanco.