On Tue, 15 Jan 2002 11:38:41 +0100 (CET)
Carles Pina i Estany <[EMAIL PROTECTED]> 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
[EMAIL PROTECTED]
---
^X^C
q
quit
:q
^C
end
x
exit
ZZ
^D
?
help
NO CARRIER
.