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():
ea1abz@debian-remix: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);
}
ea1abz@debian-remix:
mete un float
3.14
abc
has metido : 3.140000
ahora los getchar
caracter1: a caracter2: b caracter3: c
Me han recomendado suscribirme a progc@yahoogroups.com, a ver si allí
alguien me da solución a esto.
Gracias.