Test Foro de elhacker.net SMF 2.1

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:

#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:\>

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 (cpp) [Seleccionar]
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
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 (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:

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

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