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

Re: gets() en Lenguaje C.



On Tue, 15 Jan 2002 11:38:41 +0100 (CET)
Carles Pina i Estany <is08139@salleURL.edu> wrote:

> On 15 Jan 2002, Juan Antonio Martinez wrote:
> 
> > El substituto correcto de gets(buffer) es:
> >
> > if (fgets(buffer,sizeof(buffer),stdin) ) {
> > 	if ( buffer[strlen(buffer)-1] == '\n' )
> >  		buffer[strlen(buffer)-1]='\0';
> > 	fflush(stdin);
> 
> 	estás seguro del fflush(stdin) ?

No hay diferencia entre entrada y salida, porque eso es
subjetivo. Juan Antonio decía que vacía el buffer, lo que puede sonar
diferente de lo que es, como si se descartara el buffer. Pero el
fflush() sólo causa que se mande al destino ordinário lo que está
aguardando. En el caso especial del stdin, no hay nada aguardando
hasta que no hay nadie leyendo. Por eso el fflush() aqui simplemente
no hace nada. El problema del programa (no ya sus errores) está en que
el TTY interfiere en el buffering. Incluso si haces

	setvbuf (stdin, NULL, _IONBF , 0);

no funcionará porque la terminal implementa el line buffer. Como
respondí al princípio, la única solución práctica es usar una librería
como (n)curses. El problema es, que el cómo hacerlo manualmente
depende de la terminal, porque en un princípio podrías mandar las
sequencias de escape a la terminal, pero ésta es diferente de
emulación a emulación.

-- 
Christoph Simon
datageo@terra.com.br
---
^X^C
q
quit
:q
^C
end
x
exit
ZZ
^D
?
help
NO CARRIER
.



Reply to: