Re: [Fwd: Re: fflush(stdin) no limpia por que??]
On 1 Jul 2002, puskas wrote: > Yo también encuentro el mismo problema, en entornos dos/win me funciona > de maravilla pero en linux me suele dar problemas... hay otra función > que sirve para lo mismo (tienen algunas diferencias pero a nosotros nos > vale ;-)) Se llama fpurge y el funcionamiento es el mismo... No se la > versión de gcc que tienes pero en la mía he encontrado ésto haciendo el > man fpurge... > > NAME >fpurge, __fpurge - purge a stream > > SYNOPSIS >/* unsupported */ >#include > >int fpurge(FILE *stream); > >/* supported */ >#include >#include > >void __fpurge(FILE *stream); Muchas gracias, he probado esta segunda opcion y funciona bien, lo del fflush (stdin) yo lo habia utilizado en windows sin problemas pero aqui pues no. Pues na, muchas gracias de nuevo. Esteban. > > Como verás la primera no está soportada, pero la segunda la he probado y > me va de maravilla,... > > SUERTE.(y a hacer muchos __fpurge(stdin) ;-)) > > > El lun, 01-07-2002 a las 22:32, Esteban Garcia Cuesta escribió: > > Hola, > > Estoy usando la funcion de fflush (stdin)para limpiar el buffer de > > entrada, pero parece que no hace nada. Lo tengo puesto justo antes de un > > getchar() y este me coge basura, sin quedarse a la espera por teclado que > > es lo que deberia hacer si el buffer esta vacio (ahi esta la utilidad de > > fflush). > > Sabeis porque puede ser? Hace tiempo que no programo en C pero no > > recuerdo que esto me pasara. > >Muchas gracias > > Esteban. > > > > > > > > -- > > To UNSUBSCRIBE, email to [EMAIL PROTECTED] > > with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED] > > -- > Grandes desastres de la historia: HIROSHIMA 45, CHERNOBIL 86 Y WINDOWS > 95 > Win'95: Unknown Error: The system was working right. > > > -- > To UNSUBSCRIBE, email to [EMAIL PROTECTED] > with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED] > -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: fflush(stdin) no limpia por que??
Hola, fflush más bien es para descriptores de salida si me acuerdo bien, para descriptores de entrada tiene un comportamiento "inesperado" (en solaris hace lo que supones que debería hacer) Una chapuza como una casa "made in my university": static void fflush() { fflush(stdout); stdin->_IO_read_ptr = stdin->_IO_read_base; stdin->_IO_read_end = stdin->_IO_read_base; fflush(stdin); } no "sincroniza", sinó que si lo miras bien y sigues las estructuras por la libc y demás mueve los punteros a saco y se carga lo que pille del stdin Funcionar funciona... pero mejor usar ncurses :-) On Mon, 1 Jul 2002, Esteban Garcia Cuesta wrote: > Hola, > Estoy usando la funcion de fflush (stdin)para limpiar el buffer de > entrada, pero parece que no hace nada. Lo tengo puesto justo antes de un > getchar() y este me coge basura, sin quedarse a la espera por teclado que > es lo que deberia hacer si el buffer esta vacio (ahi esta la utilidad de > fflush). > Sabeis porque puede ser? Hace tiempo que no programo en C pero no > recuerdo que esto me pasara. >Muchas gracias > Esteban. > > > > -- > To UNSUBSCRIBE, email to [EMAIL PROTECTED] > with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED] > Carles Pina i Estany [EMAIL PROTECTED] || [EMAIL PROTECTED] http://pinux.info http://www.salleURL.edu/~is08139/ -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: fflush(stdin) no limpia por que??
Hola, yo cuando uso algun buffer para vaciarlo uso memset no se si te refieres a eso, por ejemplo: memset (buffer,0,1024); pongo el buffer a 0 con un tamaño de 1024 bytes, yo lo uso para vaciar el buffer que va a recibir los datos en una conexion utilizando sockets. No se si te valdra pero bueno queda dicho, si lo consigues comunicalo. Un saludo. - Original Message - From: "Esteban Garcia Cuesta" <[EMAIL PROTECTED]> To: Sent: Monday, July 01, 2002 10:32 PM Subject: fflush(stdin) no limpia por que?? > Hola, > Estoy usando la funcion de fflush (stdin)para limpiar el buffer de > entrada, pero parece que no hace nada. Lo tengo puesto justo antes de un > getchar() y este me coge basura, sin quedarse a la espera por teclado que > es lo que deberia hacer si el buffer esta vacio (ahi esta la utilidad de > fflush). > Sabeis porque puede ser? Hace tiempo que no programo en C pero no > recuerdo que esto me pasara. >Muchas gracias > Esteban. > > > > -- > To UNSUBSCRIBE, email to [EMAIL PROTECTED] > with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED] > > -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
[Fwd: Re: fflush(stdin) no limpia por que??]
Yo también encuentro el mismo problema, en entornos dos/win me funciona de maravilla pero en linux me suele dar problemas... hay otra función que sirve para lo mismo (tienen algunas diferencias pero a nosotros nos vale ;-)) Se llama fpurge y el funcionamiento es el mismo... No se la versión de gcc que tienes pero en la mía he encontrado ésto haciendo el man fpurge... NAME fpurge, __fpurge - purge a stream SYNOPSIS /* unsupported */ #include int fpurge(FILE *stream); /* supported */ #include #include void __fpurge(FILE *stream); Como verás la primera no está soportada, pero la segunda la he probado y me va de maravilla,... SUERTE.(y a hacer muchos __fpurge(stdin) ;-)) > El lun, 01-07-2002 a las 22:32, Esteban Garcia Cuesta escribió: > Hola, > Estoy usando la funcion de fflush (stdin)para limpiar el buffer de > entrada, pero parece que no hace nada. Lo tengo puesto justo antes de un > getchar() y este me coge basura, sin quedarse a la espera por teclado que > es lo que deberia hacer si el buffer esta vacio (ahi esta la utilidad de > fflush). > Sabeis porque puede ser? Hace tiempo que no programo en C pero no > recuerdo que esto me pasara. >Muchas gracias > Esteban. > > > > -- > To UNSUBSCRIBE, email to [EMAIL PROTECTED] > with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED] -- Grandes desastres de la historia: HIROSHIMA 45, CHERNOBIL 86 Y WINDOWS 95 Win'95: Unknown Error: The system was working right. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: [OT] Re: fflush(stdin) no limpia por que??
Miguel Ángel Vilela escribió:: On Mon, Jul 01, 2002 at 10:32:14PM +0200, Esteban Garcia Cuesta wrote: Hola, Estoy usando la funcion de fflush (stdin)para limpiar el buffer de entrada, pero parece que no hace nada. Lo tengo puesto justo antes de un getchar() y este me coge basura, sin quedarse a la espera por teclado que es lo que deberia hacer si el buffer esta vacio (ahi esta la utilidad de fflush). Sabeis porque puede ser? Hace tiempo que no programo en C pero no recuerdo que esto me pasara. He encontrado esto buscando en devhelp: Function: int fflush (FILE *stream) This function causes any buffered output on stream to be delivered to the file. No dice nada de que vacíe el buffer. Si lo que quieres es vaciarlo creo que tendrás que leerlo hasta que no haya nada que leer. En un menú que leía números hice lo siguiente para asegurarme de que siempre leía un número ("%d") y no otra cosa: char trash[100]; ... printf ("\n Opción: "); while (scanf ("%d", &op) != 1) { scanf ("%99s", trash); printf ("\n La opción %s es incorrecta.", trash); printf ("\n Opción: "); } /* while */ Aprovecho que scanf() devuelve el número de variables que ha logrado leer, y si ese número no es el esperado leo el buffer hasta que encuentro un número. Creo que si lo que quieres es leer el buffer podrías hacer lo siguiente: trash char[4096]; ... scanf ("%4095s", trash); getchar (); Saludos :-) fflush(stdin) debería funcionar sin problemas para borrar el buffer, es lo que dice el manual y yo lo he utilizao sin problemas. -- Héctor Andrés Rompato Carricart <[EMAIL PROTECTED]> Coordinador técnico COVIARES S.A. -- Autopista La Plata - Buenos Aires Gerencia de equipos y sistemas Av. España y Autopista, Quilmes (1878) Buenos Aires, Argentina -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: fflush(stdin) no limpia por que??
man fflush Esteban Garcia Cuesta wrote: Hola, Estoy usando la funcion de fflush (stdin)para limpiar el buffer de entrada, pero parece que no hace nada. Lo tengo puesto justo antes de un getchar() y este me coge basura, sin quedarse a la espera por teclado que es lo que deberia hacer si el buffer esta vacio (ahi esta la utilidad de fflush). Sabeis porque puede ser? Hace tiempo que no programo en C pero no recuerdo que esto me pasara. Muchas gracias Esteban. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
[OT] Re: fflush(stdin) no limpia por que??
On Mon, Jul 01, 2002 at 10:32:14PM +0200, Esteban Garcia Cuesta wrote: > Hola, > Estoy usando la funcion de fflush (stdin)para limpiar el buffer de > entrada, pero parece que no hace nada. Lo tengo puesto justo antes de un > getchar() y este me coge basura, sin quedarse a la espera por teclado que > es lo que deberia hacer si el buffer esta vacio (ahi esta la utilidad de > fflush). > Sabeis porque puede ser? Hace tiempo que no programo en C pero no > recuerdo que esto me pasara. He encontrado esto buscando en devhelp: Function: int fflush (FILE *stream) This function causes any buffered output on stream to be delivered to the file. No dice nada de que vacíe el buffer. Si lo que quieres es vaciarlo creo que tendrás que leerlo hasta que no haya nada que leer. En un menú que leía números hice lo siguiente para asegurarme de que siempre leía un número ("%d") y no otra cosa: char trash[100]; ... printf ("\n Opción: "); while (scanf ("%d", &op) != 1) { scanf ("%99s", trash); printf ("\n La opción %s es incorrecta.", trash); printf ("\n Opción: "); } /* while */ Aprovecho que scanf() devuelve el número de variables que ha logrado leer, y si ese número no es el esperado leo el buffer hasta que encuentro un número. Creo que si lo que quieres es leer el buffer podrías hacer lo siguiente: trash char[4096]; ... scanf ("%4095s", trash); getchar (); Saludos :-) -- --==-- --==-- Miguel Ángel Vilela --==-- --==-- a.k.a miguev at fmat.ull.es, GULiC, Barrapunto & IRC-Hispano GULiC - Grupo de Usuarios Linux de Canarias - http://www.gulic.org Facultad de Matemáticas, Universidad La Laguna --- www.fmat.ull.es Public GPG key at http://search.keyserver.net (search for: miguev) Linux Reg. User #184518 - Debian GNU/Linux SID - kernel 2.4.18-xfs Linux Reg. Machines: #81674, #81677, #105478, #118020, #118022 -- Linux Driver Petition #73209 --- No ePatents Petition #80354 -- Rules for Academic Deans: (1) HIDE (2) If they find you, LIE -- Father Damian C. Fandal pgpJE0vbcJv1N.pgp Description: PGP signature
Re: fflush(stdin) no limpia por que??
Hola, Hasta el momento yo solo he utilizado fflush para sincronizar los buffers, en ningún momento lo he utilizado para vaciar buffer alguno. Que yo recuerde había otra forma de vaciar un buffer, pero no se cual es. Un saludo, Pedro -- Pedro Martinez Juliá \ [EMAIL PROTECTED] )|[EMAIL PROTECTED] /http://yoros.cjb.net Socio HispaLinux #311 Usuario Linux #275438 - http://counter.li.org GnuPG publi c information: pub 1024D/74F1D3AC Key fingerprint = 8431 7B47 D2B4 5A46 5F8E 534F 588B E285 74F1 D3AC pgpk9qof6J0rE.pgp Description: PGP signature
fflush(stdin) no limpia por que??
Hola, Estoy usando la funcion de fflush (stdin)para limpiar el buffer de entrada, pero parece que no hace nada. Lo tengo puesto justo antes de un getchar() y este me coge basura, sin quedarse a la espera por teclado que es lo que deberia hacer si el buffer esta vacio (ahi esta la utilidad de fflush). Sabeis porque puede ser? Hace tiempo que no programo en C pero no recuerdo que esto me pasara. Muchas gracias Esteban. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]