Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: juanigato en 11 Abril 2009, 05:16 am



Título: problema con getchar()
Publicado por: juanigato en 11 Abril 2009, 05:16 am
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.


Título: Re: problema con getchar()
Publicado por: leogtz en 11 Abril 2009, 06:22 am
Tu codigo me compila bien, pero hay un problema con el buffer de entrada, así funciona bien:

Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4.   char continue_o_exit;
  5.   int number;
  6.   char buffer[3]; // En caso de que decidas usar setbuf()
  7.   printf ("Determine un valor a number: ");
  8.   scanf ("%d", &number);
  9.   printf ("Number is %d", number);
  10.    printf ("\n\nSelecciona continue (c) or exit (e): ");
  11.     // setbuf(stdin, NULL);
  12.     while(getchar()!='\n');
  13.     continue_o_exit = getchar();
  14.     if(continue_o_exit == 'c')
  15.      printf ("continue");
  16.   else
  17.      printf ("exit");
  18.   return 0;
  19. }
  20.  

Salida:

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

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


Título: Re: problema con getchar()
Publicado por: juanigato en 13 Abril 2009, 01:42 am
Gracias por la respuesta Leo!


Título: Re: problema con getchar()
Publicado por: 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.

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

Un Saludo!


Título: Re: problema con getchar()
Publicado por: Despondency en 23 Diciembre 2013, 19:11 pm
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


Título: Re: problema con getchar()
Publicado por: leosansan en 23 Diciembre 2013, 19:47 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 (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

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

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! ..... !!!!

(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)