Quindi, decidi quante barre vuoi visualizzare in totale (ad esempio, 80) e fai le proporzioni ...
Quindi, decidi quante barre vuoi visualizzare in totale (ad esempio, 80) e fai le proporzioni ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
grazie.. cosi le pipe vengono stampate gradualmente..
cmq nn faccio stampare una pipe per ogni iterazione, ma ne faccio stampare 10 in tutto per cui il rallentamento è quasi inesistente..
grazie mille!!
ho fatto cosi:
non so se sia l'implementazione migliore pero' ottiene l'effetto desiderato...codice:int k=0,z=0; char vettore[size]; ... while(k<size) { ... z++; if(z == (size/10)) { printf("|"); fflush(stdout); z = 0; } ... k++; }
grazie ancora![]()
Di niente, ciao!![]()
Amaro C++, il gusto pieno dell'undefined behavior.
Avresti potuto usare l'operatore modulo, ma non e' questo il problema.Originariamente inviato da quagmire
ho fatto cosi:
Se visualizzi una barra ogni 10, se size vale 80, ne visualizzi 8 e puo' andare bene ...
Ma se size vale 2000, allora ne dovresti visualizzare 200 e non andrebbe piu' bene ...
Quello che dovresti fare e' calcolare il valore "10" a seconda di size in modo da avere un divisore adeguato in tutti i casi.
No MP tecnici (non rispondo nemmeno!), usa il forum.
forse nn ho capito.. cmq cosi facendo visualizzo in ogni caso 10 pipe perche ho
z == size/10, se size = 80 la printf viene fatta 10 volte cioe per z pari ai multipli di 8...
cioe a seconda del divisore che in qst caso è 10 ho il numero d pipe stampate, con size/10
ho 10 pipe, size/20 ne ho 20 e cosi via...
m sbaglio :master: ?
Giusto ...
Avevo confuso con il modulo ...
Come non detto.
No MP tecnici (non rispondo nemmeno!), usa il forum.
a proposito di barra di caricamento...anche io avrei dei dubbi a riguardo...
supponiamo che io abbia un elaborazione bella grossa e voglio stampare, che so, 50 "=". Quindi ogni 2% stampo un "="
la mia domanda è: se voglio fare una cosa come wget, che fa così
come faccio? ovviamente wget non aggiunge altre righe, ma resta ferma li...codice:[> ] 1% [=> ] 2% ... ... [========================] 100%
come fa a stampare caratteri e poi "ritornare indietro"?
non so se sn stato chiaro
Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!
Basta usare il carattere '\b' per tornare indietro. Ecco un esempietto (puoi riutilizzare facilmente la funzione PrintProgressBar e le sue strutture in altri progetti).
codice:#include <stdio.h> typedef enum { false=0, true=!false } bool; typedef struct { /* Delimitatore iniziale (es. [ )*/ char StartDelimiter; /* Delimitatore finale (es. ] )*/ char EndDelimiter; /* Blocco centrale (es. = )*/ char Block; /* Ultimo blocco (es. > ) */ char CurBlock; /* Flag che indica se mostrare la percentuale di avanzamento o meno */ bool PrintPercent; } ProgressBarSettings; void PrintProgressBar(unsigned int Width, double Max, double Pos, bool update, ProgressBarSettings * Settings); int main() { int i; /* Inizializza le impostazioni della barra */ ProgressBarSettings pbs; pbs.StartDelimiter='['; pbs.EndDelimiter=']'; pbs.Block='='; pbs.CurBlock='>'; pbs.PrintPercent=true; printf("Progress: "); /* Mostra la barra vuota */ PrintProgressBar(40,80,0,false,&pbs); for(i=0;i<=80;i++) { /* Attende la pressione di un tasto (funzione non-standard) */ _getch(); /* Aggiorna la barra di avanzamento */ PrintProgressBar(40,80,i,true,&pbs); } printf(" Done"); _getch(); return 0; } void PrintProgressBar(unsigned int Width, double Max, double Pos, bool update, ProgressBarSettings * Settings) { /* Blocchi da stampare */ unsigned int printBlocks=(unsigned int)(Width*Pos/Max); /* Contatore */ unsigned int counter; /* Se stiamo aggiornando una barra già esistente...*/ if(update) { /* ... ci posizioniamo all'inizio di essa per poi sovrascriverla. */ for(counter=Width+2+(Settings->PrintPercent?5:0);counter;counter--) putchar('\b'); } /* Stampa il delimitatore iniziale */ putchar(Settings->StartDelimiter); /* Resetta il contatore */ counter=Width; /* Stampa i tutti i blocchi meno 1; intanto decrementa il contatore, in modo che alla fine in esso resterà il numero di spazi da stampare per riempire la barra */ for(;printBlocks>1;printBlocks--,counter--) putchar(Settings->Block); /* Stampa l'ultimo blocco; se l'operazione è completata usa il carattere normale, se no quello scelto per l'ultimo blocco */ putchar((Max==Pos)?Settings->Block:Settings->CurBlock); /* Decrementa il contatore perché è stato stampato un altro blocco */ counter--; /* Stampa gli spazi */ for(;counter;counter--) putchar(' '); /* Stampa il delimitatore finale */ putchar(Settings->EndDelimiter); /* Eventualmente stampa anche la percentuale di avanzamento */ if(Settings->PrintPercent) printf(" %3d%%",(int)(100*Pos/Max)); };
Amaro C++, il gusto pieno dell'undefined behavior.
non riesco a compilare per colpa del _getchOriginariamente inviato da MItaly
Basta usare il carattere '\b' per tornare indietro. Ecco un esempietto (puoi riutilizzare facilmente la funzione PrintProgressBar e le sue strutture in altri progetti).
ps.: ho premuto sul tuo link nella firma. mi devo sentire un babbeo?
Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!