elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Borrar buffer , como funciona getchar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Borrar buffer , como funciona getchar  (Leído 8,126 veces)
Jomad205

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Borrar buffer , como funciona getchar
« en: 12 Noviembre 2012, 16:36 pm »

Hola, muy buenos dias a todos:
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
  1. #include <stdio.h>
  2.  
  3. main(void)
  4. {
  5. char letra='0',c;
  6.  
  7. while (!(letra >= 'a' && letra <=  'z' || letra >= 'A' && letra <=  'Z'))
  8. {
  9. printf("\nEste programa únicamente admite letras\n");
  10. printf("Introduce una letra: ");
  11. scanf("%c", &letra);
  12. while((c=getchar())!= '\n');
  13. printf("\n\n\n");
  14. }
  15. printf("¡Por fin UNA LETRA!");
  16. printf("\n\nLa letra introducida ha sido: %c", letra);
  17. printf("\n\n\n\n");
  18. }
  19.  
Que dice así :

/*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
  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5. char entrar;
  6. int nc=0;
  7.  
  8. printf("Introducir caracteres. Pulsar ctrl+D para terminar: ");
  9. while (entrar != EOF)
  10. {
  11. entrar = getchar();
  12. if (entrar != '\n') nc++;
  13. }
  14. printf("\nEl numero de caracteres es: %d\n",nc);
  15. }
  16.  

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.


« Última modificación: 12 Noviembre 2012, 16:41 pm por Jomad205 » En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Borrar buffer , como funciona getchar
« Respuesta #1 en: 12 Noviembre 2012, 16:55 pm »

Básicamente, cuando vos ingresás datos por pantalla, tenés que pulsar el enter para que se procese la información.

Ahora bien, el buffer va a tomar tanto los datos que vos ingresaste como el enter (caracter '\n'). Obviamente, ese caracter de salto de línea no es parte de los datos que vos querías ingresar, por ende, es necesario eliminarlo!

Si por ejemplo estás en un loop donde en cada corrida utilizas una función para leer del buffer de entrada (getchar() es un ejemplo), llega un momento que lee solo ese caracter de salto de línea, cosa que no estaría bien, porque vos no querías ingresar dicho caracter (a menos claro, que hubieses querido ingresarlo :P).

En resumen, el buffer siempre va a tener lo que vos ingresás, y el caracter de salto de línea que también ingresas para que empiece a procesar la información. Lo que se le denomina "limpiar el buffer" es justamente, eliminar el caracter de salto de línea que queda en el buffer al momento de ingresar información por pantalla, y así el programa puede seguir pidiendo información al usuario (notar que si ve que el buffer no está "vacío", no pide datos al usuario como debería, sino que tomaría ese caracter de salto de línea como el dato que ingresa el usuario).

Espero que se haya entendido un poco más.


En línea

Jomad205

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Borrar buffer , como funciona getchar
« Respuesta #2 en: 13 Noviembre 2012, 17:23 pm »

Ajá! Creo que ahora lo comprendo mejor, te lo agradezco :) Trataré de buscar algo más de información al respecto :) Gracias!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problema con getchar()
Programación C/C++
juanigato 5 7,482 Último mensaje 23 Diciembre 2013, 19:47 pm
por leosansan
getchar() != EOF
Programación C/C++
Treppe 6 13,556 Último mensaje 20 Julio 2011, 21:48 pm
por rir3760
ayuda con getchar
Programación C/C++
ometeotl 6 3,954 Último mensaje 10 Octubre 2011, 19:46 pm
por ometeotl
Ayuda con getchar
Programación C/C++
prometheus48 6 1,948 Último mensaje 31 Diciembre 2011, 21:36 pm
por Unbr0ken
Funcio Getchar();
GNU/Linux
Odai 5 3,393 Último mensaje 8 Febrero 2012, 15:57 pm
por Odai
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines