problema con getchar()

Iniciado por juanigato, 11 Abril 2009, 05:16 AM

0 Miembros y 1 Visitante están viendo este tema.

juanigato

Si utilizo un scanf de un entero y a continuacion un getchar(), este último no funciona. ¿Por qué?

int main()
{
   char continue_o_exit;
   int number;

   printf ("Determine un valor a number: ");
   scanf ("%d", &number);
   printf ("Number is %d", number);
   

   printf ("\n\nSelecciona continue (c) or exit (e): ");
   continue_o_exit = getchar();
   
   
   if (continue_o_exit == 'c')
      printf ("continue");
   else
      printf ("exit");


   return 0;
}


Se que repitiendo
continue_o_exit = getchar();
solucione el problema, pero me gustaría saber por qué no funciona de una para aprender.
Gracias por su tiempo y ayuda.

leogtz

Tu codigo me compila bien, pero hay un problema con el buffer de entrada, así funciona bien:

#include <stdio.h>
int main()
{
   char continue_o_exit;
   int number;
   char buffer[3]; // En caso de que decidas usar setbuf()
   printf ("Determine un valor a number: ");
   scanf ("%d", &number);
   printf ("Number is %d", number);
    printf ("\n\nSelecciona continue (c) or exit (e): ");
     // setbuf(stdin, NULL);
     while(getchar()!='\n');
     continue_o_exit = getchar();
     if(continue_o_exit == 'c')
      printf ("continue");
   else
      printf ("exit");
   return 0;
}


Salida:

C:\>codes
Determine un valor a number: 67
Number is 67

Selecciona continue (c) or exit (e): e
exit
C:\>

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

juanigato

Gracias por la respuesta Leo!

EagleOneRaptor

La función getchar no te funciona, porque no se limpió el retorno de linea (ENTER) usado durante la función scanf, por lo que getchar lee ese retorno de línea, impidiendole esperar a que presiones nada.

La solución ya la dijo Leo Gutierrez, limpiando la entrada con la siguiente instrucción:
Código (cpp) [Seleccionar]
while(getchar()!='\n')

Un Saludo!
Divida sus archivos con facilidad usando File Breaker :)
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre." Dr. Johnson.

Despondency

Estaba con el mismo problema... porque la funcion fflush(stdin) no ayuda?? :/ u.u mi codigo es

#import <stdio.h>
main(){

  float medida;
  char resp;
  do{
    printf("Ingresa una medida en centimetros\n");
    scanf("%f", &medida);
    printf("La medida dada en pulgadas es: %f\n",medida*2.54);
    fflush(stdin);
    printf("Calculamos otra medida? (s = si, n = no)");
    putchar('\n');
    resp = getchar();
    resp = getchar();

  }
  while(resp== 's' || resp == 'S');

}

y bueno alli puse dos veces el getchar para que jalara xD

leosansan

Cita de: Despondency en 23 Diciembre 2013, 19:11 PM
Estaba con el mismo problema... porque la funcion fflush(stdin) no ayuda??
........................
y bueno alli puse dos veces el getchar para que jalara xD


Respecto a la funcion fflush(stdin) leete Lo que no hay que hacer en C/C++. Nivel basico.

Y respecto al uso de los dos getchar ya en un post anterior te pusieron la respuesta:

Cita de: EagleOneRaptor en 13 Abril 2009, 02:10 AM
La función getchar no te funciona, porque no se limpió el retorno de linea (ENTER) usado durante la función scanf, por lo que getchar lee ese retorno de línea, impidiendole esperar a que presiones nada.

Es decir, un getchar lee el retorno del scanf y el otro la variable "resp".

Felices Navidades y Próspero Año Nuevo.
Saluditos! ..... !!!!