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.

