Anzeige:
Ergebnis 1 bis 9 von 9

Thema: C: Frage zu einer for Schleife

  1. #1
    Registrierter Benutzer Avatar von Stefan Feeser
    Registriert seit
    13.02.2000
    Ort
    Karlstein
    Beiträge
    50

    Question C: Frage zu einer for Schleife

    Hallo zusammen,

    kann mir jemand erklären warum folgendes Konstrukt funktioniert

    for (i_i = 1; i_i < 10; i_i++)
    {
    printf("%d\n", i_i);
    sleep(5);
    }
    und folgendes nicht?

    for (i_i = 1; i_i < 10; i_i++)
    {
    printf(". ");
    sleep(5);
    }
    Sorry, wenn ich vielleicht doof frage, aber wie schon ein paar mal auf diesem Board erwähnt übe ich noch (mache auch grade einen C/C++ Kurs)

    Gruss und Danke

    Stefan

  2. #2
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    die Zeile mit den Punkten wird nicht angezeigt, weil sie nicht mit einem \n abgeschlossen wird, nehme ich an.
    I haven't lost my mind - It's somewhere on a backup-disc

  3. #3
    Registrierter Benutzer Avatar von Stefan Feeser
    Registriert seit
    13.02.2000
    Ort
    Karlstein
    Beiträge
    50

    Question

    Hi,

    ja das ist das Verhalten, sorry, dass ich das nicht besser beschrieben habe. Warum ist das aber so? Wenn ich die Funktion sleep weglasse, funktioniert das! Ich verstehe einfach hier die Funktionen nicht.

    Vielleicht kann mir jemand ja einen Tipp geben wo ich die Ein-/Ausgabefunktionen und deren Verhalten genau nachlesen kann - wenn möglich nicht "man", oder aber kurz erklären wo die Unterschiede sind. Mir sind übrigens auch noch nicht ganz die Unterschiede zwischen getchar und getc, bzw. die entsprechenden Ausgabependants klar...

    Gruss

    Stefan

  4. #4
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    Code:
    for (i_i = 1; i_i < 10; i_i++)
    {
    printf(". ");
    fflush( stdout ); // sollte helfen
    sleep(5);
    }
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  5. #5
    Registrierter Benutzer Avatar von Stefan Feeser
    Registriert seit
    13.02.2000
    Ort
    Karlstein
    Beiträge
    50
    Danke,

    ich habe eben auch von einem Kollegen erfahren, dass sich printf so verhält, dass alles was im Speicher steht erst bei einem Carriage Return ausgegeben wird - es handelt sich bei C um eine zeilenorientierte Ausgabe.

    Gruss

    Stefan

  6. #6
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    Man koennte auch statt
    Code:
    printf(". ");
    fflush( stdout );
    Code:
    fprintf( stderr, ". " );
    verwenden!
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  7. #7
    Registrierter Benutzer
    Registriert seit
    18.03.2005
    Beiträge
    211
    wobei printf("???") und fprintf(stderr,"???") nicht das selbe bewirken ^^
    wenn pech hast, faengt nen vorheriger shellbefehl die ausgabe auf der errorconsole ab und du wunderst dich warum nichts siehst ^^

    das flushen iss schon der bessere weg

    Ciao ...

  8. #8
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    Natuerlich sind printf("???") und fprintf(stderr,"???") nicht das gleiche.
    Mir ist nur so der Gedanke gekommen dass man das auch mit stderr auch machen koennte - wobei natuerlich fflush( stdout ) zu bevorzugen ist, keine Frage!
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  9. #9
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von nul Beitrag anzeigen
    wobei natuerlich fflush( stdout ) zu bevorzugen ist, keine Frage!
    Nicht unbedingt. Ich hasse programme, die stdout mit sinnlosen Fortschrittsbalken vollmüllen, die ich dann von Hand rausschneiden muss, wenn ich die Ausgabe des Programmes in eine Datei geleitet habe.

    Für sowas hat sich eingebürgert, stderr zu verwenden, auch wenn das strenggenommen ein Mißbrauch ist.

Lesezeichen

Berechtigungen

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