On Sat, 12 Jan 2002 11:17:55 -0800 (PST) Jose Luis Alarcon <[EMAIL PROTECTED]> wrote:
> Por favor, si hay por aqui alguien que > conozca el C, le pido encarecidamente que > eche un vistazo al programa que adjunto (es > muy cortito) y averigue por que diablos > falla la orden gets(). Antes que nada, tienes dos errores que no tienen realmente que ver con eso: primero le das un char a scanf pero lees una cadena. Si el usuario teclea mas que un car�cter, puede pasar de todo. Y el segundo es que usas gets, que alegrar� mucho a los crackers, porque no comprueba la longitud del buffer entregado, por lo que es possible crear un buffer overflow y alterar el c�digo del programa en tiempo de ejecuci�n. Tal como lo utilizas, el scanf tiene el mismo problema. Adem�s hay algunos errores formales como que no declaras el tipo de devoluci�n de main ni devuelves nada al sistema. Acerca de tu problema: Primero: en realidad el prompt para salir del bucle no deber�a ni salir, al menos que das un fflush (stdout), pero como no est� garantido como se comporta el buffering, no es predecible. Entonces: Si ejecutas el programa, vas a teclear no s�lo `s' sino tambi�n un retorno de carro. El %s lee una cadena s�lo de caracteres no blancos, y el retorno de carro cuenta como no imprimible. As� que el retorno de carro se queda en el buffer. Despu�s de la invitaci�n de teclear algo que escribir�as en el fichero, el gets(), va a encontrarse con este retorno de carro y lo escribe en datos.txt. Entonces recomienza el bucle y preguntas de nuevo si quiere salir. Pero como no has tenido posibilidad de teclear los datos, tampoco hubo un retorno de carro. Por eso, las dos preguntas te salen en la misma l�nea. Para hacerlo funcionar tendr�as que parar el buffering del tty que est�s usando, lo que tiene unos par�metros bastante esot�ricos. Ser�a m�s f�cil que uses la librer�a curses, que hace justamente eso y m�s. Si esto es un ejemplo de un libro, cambia de libro. -- christoph Simon [EMAIL PROTECTED] --- ^X^C q quit :q ^C end x exit ZZ ^D ? help .

