Hi! Ich hätte gerne in meinen Programmen bei Berechnungen oder Ausführen von zeitintensiven Befehlen im Hintergrund eine Anzeige des Fortschritts in Prozent. Die Programme werden nur in der Konsole ausgeführt. Ich finde dazu aber kein Beispiel wie man sowas macht. Also in der Konsole soll es dann aussehen wie: Berechne .... 42% oder besser noch diesen netten Balken: Berechne : [========= ] 42% Hat da jemand irgenwo ein Beispiel oder irgendeinen Link? Oder wie nennt man denn sowas, ich finde nichts. Vielen Dank für Tips!
Nennt sich in der Regel 'Steuercodes' für das Terminal. Such mal nach Anleitungen zum VT100 oder sowas, da ist beschrieben, wie man den Cursor bewegt, Zeichen löscht, Farben einstellt und so weiter. Klappt dann z.B. mit jedem VT100-Terminal. Weitere Stichworte: - termios - termcap - ncurses
Die simpelste Moeglichkeit (nur unter Linux getestet):
1 | #include <iostream> |
2 | #include<cstdlib> |
3 | #include<unistd.h> |
4 | |
5 | void print_progress(const float& percentage) |
6 | {
|
7 | printf("\rProgress: %6.2f%%", percentage); |
8 | fflush(stdout); |
9 | }
|
10 | |
11 | int main() |
12 | {
|
13 | printf("starting....\n"); |
14 | for (float f(0.0); f < 100.0; f += 1.27) |
15 | {
|
16 | print_progress(f); |
17 | usleep(100000); |
18 | }
|
19 | printf("\n...done\n"); |
20 | }
|
Die Richtung, die Sven vorgibt, ist richtig. Zudem wird man noch die Pufferung abstellen müssen. Ich habe mal spaßeshalber das ganze in einer dreist-primitiven Variante probiert: Zeile ausgeben, nach einer Weil mit Backspace wieder löschen, und neu ausgeben:
1 | #include <stdlib.h> |
2 | //#include <stddef.h>
|
3 | #include <stdio.h> |
4 | //#include <stdint.h>
|
5 | #include <unistd.h> // bei Linux |
6 | |
7 | |
8 | int main( int nargs, char **args ) |
9 | {
|
10 | int iProzent; |
11 | |
12 | for( iProzent=0; iProzent<=100; ++iProzent ) |
13 | {
|
14 | // Zeile ausgeben:
|
15 | int nZeichen = printf( "Berechne: [" ); |
16 | int i, iBlock; |
17 | // Damit es in eine Zeile passt, nur halb soviele Blcke ausgeben
|
18 | // wie maximal Prozent vorkommen:
|
19 | for( iBlock=0; iBlock<iProzent/2; ++iBlock ) |
20 | {
|
21 | putchar( '=' ); |
22 | nZeichen++; |
23 | }
|
24 | // den Rest auf 100 mit Leerzeichen füllen:
|
25 | for( ; iBlock<100/2; ++iBlock ) |
26 | {
|
27 | putchar( ' ' ); |
28 | nZeichen++; |
29 | }
|
30 | // restliche Zeile:
|
31 | nZeichen += printf( "] %3d%%", iProzent ); |
32 | fflush( stdout ); |
33 | |
34 | sleep( 1 ); |
35 | // vor der nächsten Zeile entsprechend viele Backspace ausgeben:
|
36 | for( i=0; i<nZeichen; ++i ) |
37 | {
|
38 | putchar( '\b' ); |
39 | }
|
40 | }
|
41 | |
42 | printf( "Ich habe fertig!\n" ); |
43 | |
44 | |
45 | return 0; |
46 | }
|
Das sieht in einem xterm-Fenster absolut sauber aus und flackert nicht. Vielleicht geht das dann sogar ohne Änderung unter Windows.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.