printf- Problem - sehr eigenartig
-
Hallo,
ich habe ein Problem, dass ich mir als C-Neuling nicht erklären kann.
Ich habe in meinem Programm eine Schleife die komplizierte Rechnungen ausführt und ziemlich lange rechnet. Jetzt möchte ich während jedem Schleifendurchlauf die Zeit messen. Das mache ich mit clock();Wenn jetzt sagen wir ein Sekunde vergangen ist möchte ich den Status ausgeben (siehe Code). Also messe ich Zeitdifferenzen in der if-schleife. Ganz am Ende habe ich die else-bedingung auskommentiert. In diesem Fall wird aber die Augabe auf der Konsole nur sehr selten aktualisiert (ca. alle 60s). Mit dem Else-Block dagagen wird die Ausgabe jedes mal aktualisiert, wenn die if bedingung erfüllt ist (jede sekunde). Ich habe es auch anders probiert indem ich ohne else-Block einen Zeilenumbruch innerhalb der if-schleife ausgebe, auch dann wird die konsole aktualisiert, aber das sieht ja unschön aus und man sieht nicht mehr, was die vorherigen Ausgaben waren ... das kann doch aber nicht sein ? Ich seh keinen Fehler ...
Grüße jesus
stop=clock(); timediff = (float)(stop-stop2) /CLOCKS_PER_SEC; //printf("\r %3.2fs ",timediff); //wenn Zeitdifferenz zur letzten Ausgabe > reload if (timediff >= 1.) { progress = (double)stepcount*100/(double)steps ; //Zeit der neuen Referenz stop2= clock(); //Ausgabe der Zeit zum Start printf("\r%3.2fs | %3.4f %%",(float)(stop2-prgstart) /CLOCKS_PER_SEC, progress); printf("\n"); //<<< funktioniert, aber unschön, wie geht es ohne \n ? } //else {printf(" \b");} //funktioniert auch, aber sinnloser Code
-
printf arbeitet zeilenweise gepuffert, d.h. die Ausgabe erfolgt erst am Ende der Zeile oder wenn der Puffer voll ist. Eine vorzeitige Leerung des Puffers und damit auch sofortige Ausgabe kannst du mit fflush(stdout); erzwingen.
-
waahnsinn ... funktioniert, danke ... war ja ganz einfach
jesus