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]:~/ARCHIVOS_IMPORTANTES/NEC2linux/makenec$ ./copia.exe
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]:~/ARCHIVOS_IMPORTANTES/NEC2linux/makenec$ ./copia.exe

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.








Responder a