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.
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:\>
Gracias por la respuesta Leo!
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:
while(getchar()!='\n')
Un Saludo!
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
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)