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

[SOLUCIONADO] Problema con funcion getchar

Estas en el tema de Problema con funcion getchar en el foro de C/C++ en Foros del Web. Hola a todos, tengo el siguiente algoritmo y el problema es que no me deja leer el caracter: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #include ...
  #1 (permalink)  
Antiguo 13/03/2014, 20:20
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 10 años, 1 mes
Puntos: 0
Problema con funcion getchar

Hola a todos, tengo el siguiente algoritmo y el problema es que no me deja leer el caracter:
Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4.  
  5. int main () {
  6.  char desea;
  7.  float pre,iva,efec,cam,totd;
  8.   totd=0;
  9.   do{
  10.   printf("Digite el monto total de la compra\n");
  11.   pre=0;
  12.   iva=0;
  13.   scanf("%f",&pre);
  14.   iva=pre*0.16+pre;
  15.   totd=totd+iva;
  16.   printf("Digite el efectivo");
  17.   scanf("%f",&efec);
  18.   cam=efec-iva;
  19.   printf("Precio       Precio con iva       Efectivo       Cambio\n");
  20.   printf("%f\t%f\t%f\t%f\n",pre,iva,efec,cam);
  21.   printf("¿Desea continuar?\n");
  22.   desea=getchar();
  23.   _flushall();
  24.   }while(desea=='s');
  25.   printf("El total del dia es: %f",totd);
  26.   }
  #2 (permalink)  
Antiguo 14/03/2014, 13:28
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 11 años, 11 meses
Puntos: 49
Respuesta: Problema con funcion getchar

El problema radica en que se queda en memoria un enter del scanf.

Tienes que limpiar lo que se llama buffer o memoria intermedia y, en este caso, te basta con incluir la línea:

Código C++:
Ver original
  1. while(getchar()!='\n') ;

justo después del segundo scanf.

¡¡¡Saluditos!!!

  #3 (permalink)  
Antiguo 14/03/2014, 13:29
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Problema con funcion getchar

Te sucede lo mismo que en tu otro post http://www.forosdelweb.com/f96/probl...getch-1093513/

Vacia el stdin despues de scanf y getchar (para eliminar los \n que quedan debido al funcionamiento de esas funciones, puedes buscar mas informacion por ahi de porque esto funciona asi). Echa un vistazo a tu codigo: solo vacias el stdin despues de getchar, pero lo correcto es que antes de ejecutar getchar el stdin ya esté vacío:

Código C:
Ver original
  1. void fflush_stdin() {
  2.     while((c = getchar()) != '\n' && c != EOF)
  3. }
  4.  
  5. ...
  6. scanf("%f",&pre);
  7. fflush_stdin();
  8. ...
  9. scanf("%f",&efec);
  10. fflush_stdin();
  11. ...
  12. desea = getchar();
  13. fflush_stdin();
  14. ...

Revisa tu manual para la funcion _ffushall: no solo se limita a vaciar el stdin sino que hace otras cosas; si ya lo tienes en cuenta y no tienes problema con ello pues adelante, pero ten en cuenta que las funciones estan para cada cosa.

Y algo que no tiene que ver con eso: indenta tu codigo; un codigo claro, bien estructurado y comentado te puede ayudar a ver lo que que estas haciendo, y a la vez será amigable para quien pueda echarte una mano con tu codigo cuando tengas algun problema.

Saludos
vosk
  #4 (permalink)  
Antiguo 14/03/2014, 13:30
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Problema con funcion getchar

@leosansan: perdona, no vi que habias respondido antes, saludos

Etiquetas: Ninguno
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 20:11.