Anzeige:
Ergebnis 1 bis 5 von 5

Thema: printf() - überschreiben der letzten Ausgabe

  1. #1
    Registrierter Benutzer
    Registriert seit
    13.02.2006
    Beiträge
    47

    printf() - überschreiben der letzten Ausgabe

    Jetzt post ich aber im richtigen Forum, oder?
    Ich hab aus Versehen schon in Scriptsprachen gepostet. Hier ist der Link:
    http://www.mrunix.de/forums/showthread.php?t=43178

    Also mit dem Wagenrücklauf, das hat geklappt, aber nur in einem kleinen Test-Programm. Im richtigen Programm muss ich mit sleep() arbeiten und da geht's halt nicht. Das Problem ist sleep(), es scheint die Zeile einfach zu löschen. Hier mal ein Beispiel um das Problem zu demonstrieren:
    Code:
    #include <stdio.h>
    
    main()
    {
        int i, j, k;
        i = j = k = 1;
        printf("%.2d:%.2d:%.2d\n", i, j, k);  /* mit Zeilentrenner */
        sleep(1);
        i = j = k = 2;
        printf("\r%.2d:%.2d:%.2d", i, j, k);
    }
    Die Ausgabe sieht so aus:
    Code:
    01:01:01
    02:02:02
    Jetzt lass ich aber den Zeilentrenner weg, denn ich will, dass die Ausgabe an der gleichen Stelle erfolg:
    Code:
    #include <stdio.h>
    
    main()
    {
        int i, j, k;
        i = j = k = 1;
        printf("%.2d:%.2d:%.2d", i, j, k);  /* ohne Zeilentrenner */
        sleep(1);
        i = j = k = 2;
        printf("\r%.2d:%.2d:%.2d", i, j, k);
    }
    Dann seh ich ne Sekunde lang gar nix, und dann das:
    Code:
    02:02:02
    Was mach ich nur falch?

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    stdout ist gepuffert.
    Schreib an stderr

  3. #3
    Registrierter Benutzer
    Registriert seit
    30.06.2005
    Beiträge
    155
    wie gesagt ausgabe auf stdout ist block buffered, du kannst den stream aber auch flushen
    Code:
    #include <stdio.h>
    
    main()
    {
        int i, j, k;
        i = j = k = 1;
        printf("%.2d:%.2d:%.2d", i, j, k);  /* ohne Zeilentrenner */
        fflush(stdout);
        sleep(1);
        i = j = k = 2;
        printf("\r%.2d:%.2d:%.2d", i, j, k);
    }
    religion is a virus from outer space

  4. #4
    Registrierter Benutzer
    Registriert seit
    13.02.2006
    Beiträge
    47
    Siehe da! Wenn ich auf stderr schreib, klappt's, und wenn ich fflush benutze, klappt's auch.
    Super! Vielen Dank!

  5. #5
    Registrierter Benutzer
    Registriert seit
    24.12.2001
    Ort
    anywhere before EOF
    Beiträge
    236
    Alternativ gäbe es auch noch setbuf() womit man das Puffern für nen Stream ändern kann. Sollte auch für stdout gehen (nicht getestet)...
    chmod -R +t /*

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •