[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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():

ea1abz@debian-remix:~/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);
}



ea1abz@debian-remix:~/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  progc@yahoogroups.com, a ver si allí
alguien me da solución a esto.

Gracias.










Reply to: