Article View: es.comp.os.linux.programacion
Article #14212Re: [ C ] extraño programa, funciona en win pero no en linux
From: migue
Date: Thu, 23 Nov 2000 00:00
Date: Thu, 23 Nov 2000 00:00
82 lines
3561 bytes
3561 bytes
David Ram�n Yanes Fari�a wrote:
> Reply-To:
> Followup-To:
> Keywords:
> Summary:
>
> Hola amigos,
> me estaba partiendo la cabeza con un sencillo programa en C q hace de simu-
> lador d:e pulsaciones. La cuestion est� en que funciona perfectamente en
> windows, pero no en linux , hechas las oportunas modificaciones,
>
> las linea en discordias son la siguientes...
>
> printf ("%c",cad[cont-1]);
> // printf ("%c\n",cad[cont-1]);//descomentar para linux
>
> en primer lugar hice el programa en -linux- con la -primera linea-,
> pero el resultado es que tarda un rato (mas de 1 seg) y luego lo imprime
> todo de golpe, de tal maner:a que tuve que hacerlo con la segunda
> linea para que hiciese el efecto esperado..., eso s�, ahora imprime
> un caracter por linea..
>
> en windows lo hago con la primera linea y funciona tal y como -para mi-
> era de esperar...
>
> no le encuentro una explicacion razonable...
>
> que estoy haciendo mal?
>
> aqui esta el codigo para windows, con las lineas comentadas para linux...
> ((aun no manejo bien eso de la portabilidad 0:-) ))
>
> en fin, espero haberme explicado bien,
>
> gracias de antemano...
>
> *********************************************
> * Simulador de pulsaciones *
> *********************************************/
> #include <stdio.h>
> #include <dos.h>/*Comentar dos.h y string.h para linux*/
> #include <string.h>
> main (){
> char cad[100];
> printf ("Introduce una cadena: ");
> scanf (" %[^\n]",cad);
> printf ("Simulando pulsaciones...\n");
>
> for (cont=1;(cont <=strlen(cad)); ++cont){
>
> printf ("\a");
> printf ("%c",cad[cont-1]);//Comentar para linux
> // printf ("%c\n",cad[cont-1]);//descomentar para linux
> sleep (1);
> }
> }
>
Hola David. Como ya te han comentado, debes usar fflush().
Esto es por un motivo: La entrada/salida de un proceso (en este caso la salida
al terminal
con la funci�n printf) se almacena en un buffer, y , al cabo de un tiempo se
env�an todos
los datos del buffer al dispositivo. Esto se hace as� para incrementar el
rendimiento general
del sistema (ya que las operaciones de e/s son costosas, y cuesta menos en
general enviar
un conjunto de datos m�s o menos grande al dispositivo, que enviar cada dato uno
por
uno). Pero en cuaquier momento puedes llamar a fflush() que vac�a el buffer del
fichero
abierto para escritura al dispositivo (en tu caso, la salida est�ndar).
Por mi experiencia, muchos programas escritos para MSDOS no necesitan llamar a
fflush().
Esto es as� en la implementaci�n espec�fica de ESE compilador para ESE sistema
operativo.
Pero si lo que quieres es escribir programas portables, no debes realizar estas
suposiciones.
�nimo y un saludo.
Technical Details
Message-ID:
<3A1D0B4F.F1BCF9A2@eui.upv.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<ac4ev8.ma.ln@127.0.0.1>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,48a39ce68524ab06 X-Google-Attributes: gidf86c8,public From: migue <migarroi@eui.upv.es> Subject: Re: [ C ] extraño programa, funciona en win pero no en linux Date: 2000/11/23 Message-ID: <3A1D0B4F.F1BCF9A2@eui.upv.es> X-Deja-AN: 697133115 Content-Transfer-Encoding: 8bit References: <ac4ev8.ma.ln@127.0.0.1> X-Accept-Language: es-ES, en Content-Type: text/plain; charset=iso-8859-1 X-Complaints-To: newsmaster@upv.es X-Trace: polaris.cc.upv.es 974981967 26304 158.42.219.19 (23 Nov 2000 12:19:27 GMT) Organization: U.P.V. Mime-Version: 1.0 NNTP-Posting-Date: 23 Nov 2000 12:19:27 GMT Newsgroups: es.comp.os.linux.programacion