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.