🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #14212

Re: [ C ] extraño programa, funciona en win pero no en linux

#14212
From: migue
Date: Thu, 23 Nov 2000 00:00
82 lines
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-mail
References: <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