[EMAIL PROTECTED] escribi�:
Buenas, la soluci�n a tu problema es hacer un fflush(stdin); despues de
obtener un valor num�rico con scanf. La raz�n es que el sistema
operativo almacena en un buffer las teclas pulsadas, scanf() toma el
primer argumento para saber qu� tipo de datos son, por lo tanto el
retorno de carro no lo coge. Despu�s cuando llamas a getchar(), �sta
recibe el siguiente caracter que hay en el buffer del teclado, y como
scanf ha dejado el retorno de carro pues se queda con �l. En caso
contrario espera la pulsaci�n.
Un saludo,
I�aki R.
----- Mensaje Original -----
De: Ramiro Aceves <[EMAIL PROTECTED]>
Fecha: Martes, Junio 22, 2004 1:28 am
Asunto: Re: problema con scanf (novato)
De lat�n nada jejeje. A mi me pasaba lo mismo. Me lo dijeron en
el irc creo o en alg�n foro y me dieron la explicaci�n pero ahora
mismo no me acuerdo. Ten�a algo que ver con lo que te han dicho
sobre hacer el flush y todo eso. Desde luego tiene que ver sobre
la forma en que funciona internamente scanf, pero como ya te he
dicho ahora mismo ni idea. Siento no poder ayudarte m�s :(. Saludos.
Gracias, he estado investigando, y al parecer, es la instruci�n
scanf()la que estropea la siguiente getchar().
Si corremos este programa:
#include <stdio.h>
int N;
int a;
float dato;
char respuesta1,respuesta2,respuesta3;
void main(void){
printf("mete un float\n");
scanf("%f",&dato);
printf("has metido : %f\n",dato);
printf("ahora los getchar\n");
respuesta1=getchar();
respuesta2=getchar();
respuesta3=getchar();
printf("caracter1: %c caracter2: %c caracter3: %c
\n",respuesta1,respuesta2,respuesta3);
exit(0);
}
obtenemos el resultado inesperado siguiente. Al parecer, el
retorno de
carro que se mete al introducir el dato en scanf(), lo toma el primer
getchar():
[EMAIL PROTECTED]:mete un float
3.14
has metido : 3.140000
ahora los getchar
abc
caracter1:
caracter2: a caracter3: b
se me ocurri� meter un espacio en la instrucci�n scanf y ahora va
correctamente, aunque el mensaje sale despues de meter los
datos......sigo sin entender... ?�?�?�? :-\
#include <stdio.h>
int N;
int a;
float dato;
char respuesta1,respuesta2,respuesta3;
void main(void){
printf("mete un float\n");
scanf("%f",&dato);
printf("has metido : %f\n",dato);
printf("ahora los getchar\n");
respuesta1=getchar();
respuesta2=getchar();
respuesta3=getchar();
printf("caracter1: %c caracter2: %c caracter3: %c
\n",respuesta1,respuesta2,respuesta3);
exit(0);
}
[EMAIL PROTECTED]:
mete un float
3.14
abc
has metido : 3.140000
ahora los getchar
caracter1: a caracter2: b caracter3: c
Me han recomendado suscribirme a [EMAIL PROTECTED], a ver si all�
alguien me da soluci�n a esto.
Gracias.
Perd�n, perd�n, miento, no me funciona lo del fflush(stdin), cre� que lo
hab�a compilado y no era as�, sigue sin funcionar. Si alguien puede
compilarlo en su casa, a ver si le da lo mismo.....
Gracias.
Ramiro.