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

Re: problema con scanf (novato)



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 <ea1abz@wanadoo.es>
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():
> 
> 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.




Reply to: