Método alternativo para borrar el buffer de entrada en c

¿Hay algún otro método para borrar el búfer de entrada en c sin usar

fflush(); 

o

  while(getchar()!='\n'); 

Porque lo he leído en todas partes y no puedo encontrar otra manera de hacerlo.

La mejor solución es no depender tanto del estado del búfer de entrada.

Lee la entrada como líneas completas, usando fgets() , luego analiza esas. No utilice, por ejemplo, scanf() para leer valores individuales, ya que interactúa con el búfer de manera molesta.

Usando fgets() como sugerente @unwind mejor enfoque.

Para tirar al final de la línea.

 void FlushStdin(void) { int ch; while(((ch = getchar()) !='\n') && (ch != EOF)); } 

Si la stdin está lista para el final de la línea, al llamar a FlushStdin() u otras soluciones de scanf() , fgetc() publicadas, se descargará al final de la siguiente línea.

Note scanf("%*[^\n]%*1[\n]"); no funciona si el siguiente char es '\n' .

Otro método para borrar el búfer de entrada ( stdin ) sería utilizar

 scanf("%*[^\n]%*1[\n]"); 

Aquí, %*[^\n] indica a scanf que escanee todo hasta que se encuentre un carácter de nueva línea ( \n ) y luego lo descarte. %1*[\n] le dice a scanf que escanee 1 carácter incluyendo un carácter de \n y descartarlo también.