Pues bien, escribo este tema porque no entiendo bien el uso del while con la funcion getchar para proceder a la limpieza del buffer. Es mas no estoy seguro de comprender bien cual es el objetivo de la limpieza del buffer.
Entiendo por buffer, un espacio reservado en la memoria (volatil) para una determinada información del programa. Supongo que si no se limpiase quedarían restos que no nos beneficiarian a lo largo de un programa. Como he dicho hace un momento 'supongo'.
He encontrado en este mismo foro una mención al tema, pero o bien creo que no se llego a resolver lo que se preguntaba o yo no lo he entendido.
http://foro.elhacker.net/programacion_cc/iquestpara_que_sirve_la_funcion_getchar-t200224.0.html
En la documentación que tengo , hay varios ejemplos, voy a poner nada mas que 2 porque no me gustaría saturar el mensaje con información innecesaria:
Código
Que dice así :
#include <stdio.h> main(void) { char letra='0',c; while (!(letra >= 'a' && letra <= 'z' || letra >= 'A' && letra <= 'Z')) { } }
/*La condición de while puede referirse a caracteres. Por ejemplo, programa que pide una letra
mientras el carácter que introduzcamos sea diferente de una letra. La instrucción while((c=getchar())!= '\n'),
sirve para borrar el buffer (comentando esa línea e introduciendo caracteres que no sean letras al ejecutar
el programa, se puede comprobar la necesidad de borrar el buffer) y es otro ejemplo del uso de while*/
Código
#include <stdio.h> main() { char entrar; int nc=0; while (entrar != EOF) { if (entrar != '\n') nc++; } }
Y este otro seria un ejemplo de un programa que para darse por finalizado habría que pulsar CNTRL+Z (EOF) en windows o CNTRL+D en linux. Lo que haría sería contar cada uno de los caracteres que introducimos, pero no contaría los ENTER.
Debo decir que hasta ahora no habóa visto la función getchar, con lo que es desconocida para mi.
Y aquí termino, lamento si me he extendido demasiado. ¡Gracias de antemano!
EDITO: Tambien entra a la mitad de todo esto en utilizar fgets() y sscanf() para evitarnos borrar el buffer, pero como es suficiente de momento el lío que tengo respecto a esto, me parecía rizar el rizo añadirlo.