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


Responder a