[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.
Bien, efectivamente, gracias, funciona al poner el fflush (stdin)
después de scanf. Pero todavía tengo una pequeña duda: ¿Por qué el
mensaje "ahora los getchar" me sale después de acabar con los tres
getchar() y no antes, como está escrito en el código del programa?
Gracias.
Ya me voy aclarando.