Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 39
  1. #11
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quindi, decidi quante barre vuoi visualizzare in totale (ad esempio, 80) e fai le proporzioni ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  2. #12
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    64
    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!!

  3. #13
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    64
    ho fatto cosi:
    codice:
    int k=0,z=0;
    char vettore[size];
    
    ...
    
    while(k<size)
    {
       ...
       
       z++;
       if(z == (size/10))
       {
           printf("|");
           fflush(stdout);
           z = 0;
       }
    
       ...
    			
       k++;
    }
    non so se sia l'implementazione migliore pero' ottiene l'effetto desiderato...

    grazie ancora

  4. #14
    Di niente, ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #15
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da quagmire
    ho fatto cosi:
    Avresti potuto usare l'operatore modulo, ma non e' questo il problema.

    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.

  6. #16
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    64
    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: ?

  7. #17
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Giusto ...

    Avevo confuso con il modulo ...

    Come non detto.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #18
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    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ì

    codice:
    [>                       ] 1%
    [=>                      ] 2%
    ...
    ...
    [========================] 100%
    come faccio? ovviamente wget non aggiunge altre righe, ma resta ferma li...
    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!

  9. #19
    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.

  10. #20
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    Originariamente 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).
    non riesco a compilare per colpa del _getch

    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!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.