Si no haces "flush(stdout)" no hay garant�a de que el texto salga por
pantalla en el momento en el que pones el "printf()", "printf()" tan
s�lo pone datos en el buffer se salida pero no se encarga de imprimirlo.

Saludos.

Por cierto, en la lista GNU-C[1] quiz� te puedan ayudar con este y otros
problemas de programaci�n con C.

[1] https://listas.hispalinux.es/mailman/listinfo/gnu-c

El mar, 22-06-2004 a las 15:30, Ramiro Aceves escribi�:
> [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.


Responder a