Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Do while

Estas en el tema de Do while en el foro de C/C++ en Foros del Web. Hola! Os agradeceria mucho si pudierais ayudarme: Tengo un problema con la limpieza del buffer y la propuesta para solucionarlo es introducir _fpurge, sin embargo ...
  #1 (permalink)  
Antiguo 05/12/2008, 10:58
Avatar de Alzanea  
Fecha de Ingreso: diciembre-2008
Ubicación: bajo la luz de la luna.
Mensajes: 27
Antigüedad: 15 años, 4 meses
Puntos: 0
Do while

Hola! Os agradeceria mucho si pudierais ayudarme:

Tengo un problema con la limpieza del buffer y la propuesta para solucionarlo es
introducir _fpurge, sin embargo estoy tratando de compilarlo en Dev-C++ y no me deja, me aparece el mensaje: "linker error undefined reference to _fpurge".

Si no añado _fpurge se produce un error en el ejecutable.
¿Podriais darme alguna idea para poder compilar y ejecutar este programa en Dev-C++?
---------------------------------
El programa es este:

#include<stdlib.h>
#include<stdio.h>
int main()
{
char resp;
int num,cont=0,suma=0;
float op;
do{
printf("Introduce un numero: ");
scanf("%i",&num);
_fpurge(stdin);
suma=suma+num;
printf("¿Desea introducir otro numero(s/n)?");
scanf("%c",&resp);
cont++;
}while(resp=='s' || resp=='S');
op=suma/cont;
printf("La media es: %.2f", op);
return 0;
}
-------------------
Saludos!
  #2 (permalink)  
Antiguo 05/12/2008, 15:43
 
Fecha de Ingreso: febrero-2006
Mensajes: 49
Antigüedad: 18 años, 2 meses
Puntos: 1
Respuesta: Do while

Buenasss

Una forma rápida y económica de limpiar el buffer es con esta macro.

Código HTML:
#define BORRA_BUFFER while(getchar() != '\n')
Llamala despues de cada scanf y comentanos si el problema se fue. Acordate de poner ; despues de BORRA_BUFFER cuando la utilices

Saludos
  #3 (permalink)  
Antiguo 05/12/2008, 16:35
Avatar de Alzanea  
Fecha de Ingreso: diciembre-2008
Ubicación: bajo la luz de la luna.
Mensajes: 27
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Do while

Muchas gracias por tu ayuda!!

He comprobado esta macro que me comentas y me funciona!!


Aunque como todavía no se mucho sobre programacion no la entiendo muy bien.

Segun tengo entendido cuando guardamos caracteres también se guardan los intros que pulsamos por teclado en el buffer, pero la expresion *** BORRA_BUFFER while(getchar() != '\n' *** ,segun como la leo, parece indicar que limpie el buffer mientras los caracteres que tomemos sean distintos de un salto de linea. ¿Me podrías explicar un poco cómo funciona esta macro?.


Saludos.

Última edición por Alzanea; 05/12/2008 a las 16:42
  #4 (permalink)  
Antiguo 05/12/2008, 17:02
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: Do while

También puedes usar el fflush(stdin); antes del scanf, y así limpiar el buffer del teclado.
  #5 (permalink)  
Antiguo 05/12/2008, 20:09
 
Fecha de Ingreso: febrero-2006
Mensajes: 49
Antigüedad: 18 años, 2 meses
Puntos: 1
Respuesta: Do while

Buenasss

Cita:
Iniciado por Alzanea
Segun tengo entendido cuando guardamos caracteres también se guardan los intros que pulsamos por teclado en el buffer, pero la expresion *** BORRA_BUFFER while(getchar() != '\n' *** ,segun como la leo, parece indicar que limpie el buffer mientras los caracteres que tomemos sean distintos de un salto de linea. ¿Me podrías explicar un poco cómo funciona esta macro?.
Para entender como funciona la macro primero hay que entender bien como funciona el scanf. Esta funcion tiene muchas partes importantes, vamos a las que vienen al caso nomás. Cuando vos pedis que tome un entero del teclado, el scanf va a tomar caracteres de la entrada mientras sean numericos para "armar" el entero que dejará en el puntero recibido. Cuando viene algo distinto de un numero, corta la "absorción" de caracteres, o sea que si despues del numero insertaste algo queda en el buffer, y esos caracteres sobrantes van a ser enviados al próximo scanf, getchar(), etc. que aparezca, y como estas en un loop....entendes?

El borra buffer va a tomar todos los caracteres de mas que pusiste y los va a desechar, cuando llegue el enter sale del while, pero el enter lo saca del buffer, porque primero se hace el getchar() (lo saca del buffer) y despues se compara con \n.

Espero que haya quedado claro, sino cualquier cosa preguntá.

Saludos
  #6 (permalink)  
Antiguo 06/12/2008, 12:22
Avatar de Alzanea  
Fecha de Ingreso: diciembre-2008
Ubicación: bajo la luz de la luna.
Mensajes: 27
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Do while

Gracias por las respuestas!

Sí, ahora entiendo un poco mejor el funcionamiento de la macro BORRA_BUFFER. Gracias PCKing.!!!

Agradecerte a tí tambien Annoying, tu ayuda, el fflush(stdin) va genial!

Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:08.