Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [C] printf steeds op de zelfde regel laten printen in xterm  (gelezen 2467 keer)

Offline postbus24

  • Lid
[C] printf steeds op de zelfde regel laten printen in xterm
« Gepost op: 2008/12/15, 14:41:37 »
Hoi de bedoeling is om in C een tellertje laten af te tellen in een x-terminal.

in theorie (en in de praktijk op een DOS computer) zou dit moeten werken:
Citaat
printf("003\r");
sleep(1);
printf("002\r");
sleep(1);
printf("001\r");
sleep(1);
Dan zou je een telletje verwachten die op één regel aftelt.

alleen komt er dan niets op het scherm  :'(
Het komt er op neer dat iedere printf  moet eindigen met een "\n" om de output in een terminal te krijgen,
maar dan wordt er steeds een nieuwe lijn begonnen en dat wil ik dus niet  :'(

Valt dit op te lossen op één of andere manier ?
Alvast bedankt voor de tips,
groetjes


Re: [C] printf steeds op de zelfde regel laten printen in xterm
« Reactie #1 Gepost op: 2008/12/15, 14:44:34 »
Laat de \r eens weg, die is volgens mij niet nodig.

Offline postbus24

  • Lid
Re: [C] printf steeds op de zelfde regel laten printen in xterm
« Reactie #2 Gepost op: 2008/12/15, 14:48:06 »
zou best wel eens kunnen, zonder "\r" komt er net zo weinig op het scherm ..

Re: [C] printf steeds op de zelfde regel laten printen in xterm
« Reactie #3 Gepost op: 2008/12/15, 14:50:26 »
Hier werkt het nochtans zonder \r.
Output:
003002001

Dus alles op 1 regel.

Offline postbus24

  • Lid
Re: [C] printf steeds op de zelfde regel laten printen in xterm
« Reactie #4 Gepost op: 2008/12/15, 14:53:55 »
 Ik krijg hetzelfde te zien maar ik moet afsluiten met een "\n"       
       
Citaat
printf("003");
   sleep(1);
   printf("002");
   sleep(1);
   printf("001");
   sleep(1);
   printf("\n");
   exit (0);
Maar het opzet is eerder dat het vorig getal steeds overscheven wordt (en dus niet alles achter mekaar  :-[ )
die"\r" zou een cariage return moeten zijn zodat er terug aan het begin van de regel geprint wordt.

Offline Mossie

  • Lid
Re: [C] printf steeds op de zelfde regel laten printen in xterm
« Reactie #5 Gepost op: 2008/12/15, 16:47:38 »
system("clear"); // haalt het hele scherm leeg
printf("\033[%d;%dH", y, x); // x en y staan voor de plaats waar de cursor moet staan (niet in pixels, maar tekens)
printf("003");
speep(1);
printf("\033[%d;%dH", y, x);
printf("002");
sleep(1);
printf("\033[%d;%dH", y, x);
printf("001");
sleep(1);
printf("\n");
Dit zet de cursor op de plek waar jij hem wilt hebben. Zo kun je volgens mij ook dingen overschrijven

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: [C] printf steeds op de zelfde regel laten printen in xterm
« Reactie #6 Gepost op: 2008/12/15, 16:58:33 »
Liever geen system("clear") gebruiken, dat is absoluut niet portable
en die escape sequences om op een bepaalde plek te printen nog minder

Maar je kan de stream ook expliciet flushen:
#include <stdio.h>
#include <unistd.h> /* let wel op: sleep() bevindt zich op windows systemen in een andere header */
int main() {
   printf("003\r");
   fflush(stdout);
   sleep(1);
   printf("002\r");
   fflush(stdout);
   sleep(1);
   printf("001\r");
   fflush(stdout);
   sleep(1);
   printf("\n");
   return 0;
}
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: [C] printf steeds op de zelfde regel laten printen in xterm
« Reactie #7 Gepost op: 2008/12/15, 17:07:53 »
Bij nader inzien zal de methode van Erwin trouwens niet werken, want de printf stream zou nog steeds niet geflushed worden, waardoor alles pas op het einde (bij de newline) op het scherm wordt geprint (voor de zekerheid heb ik het even getest) bovenstaande methode werkt wel
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline postbus24

  • Lid
Re: [C] printf steeds op de zelfde regel laten printen in xterm
« Reactie #8 Gepost op: 2008/12/15, 17:37:00 »

   fflush(stdout);
 

DANKUWEL !!  =D

Ik had ondertussen nog als alternatief dit gefreubelt:
printf("001\x1b[1A\n"); waardoor de cursor positie ééntje omhoog gaat maar dat fflush was wat ik nodig had,
bedankt hiervoor  ;)

en de rest ook voor het meedenken, thnx

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: [C] printf steeds op de zelfde regel laten printen in xterm
« Reactie #9 Gepost op: 2008/12/15, 18:04:45 »
hehe, dat is wel leuk gevonden =D (maar inderdaad minder efficiënt/portable)
en graag gedaan hoor O0
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)