PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: Frage zu einer for Schleife



Stefan Feeser
29-08-2006, 11:37
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

SeeksTheMoon
29-08-2006, 12:53
die Zeile mit den Punkten wird nicht angezeigt, weil sie nicht mit einem \n abgeschlossen wird, nehme ich an.

Stefan Feeser
29-08-2006, 14:08
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

nul
29-08-2006, 14:54
for (i_i = 1; i_i < 10; i_i++)
{
printf(". ");
fflush( stdout ); // sollte helfen
sleep(5);
}

Stefan Feeser
29-08-2006, 14:57
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

nul
30-08-2006, 08:20
Man koennte auch statt

printf(". ");
fflush( stdout );


fprintf( stderr, ". " );
verwenden!

RHBaum
30-08-2006, 10:00
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 ...

nul
30-08-2006, 12:31
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!

Joghurt
01-09-2006, 21:00
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.