IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Affichage dynamique d'un entier


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Février 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 70
    Par défaut Affichage dynamique d'un entier
    Bonjour,

    Voici ma question : j'ai une boucle assez lourde, dans le sens où elle crée un fichier à chaque itération, à raison d'une à deux seconde par itération, pour un total d'une centaine d'itérations en général.

    J'aimerais que l'utilisateur soit informé de l'évolution : mais je ne veux pas placer un bête printf dans ma boucle, et ainsi empiler une centaine de messages ...

    Serait-il possible d'avoir une seule ligne "dynamique" qui m'affiche le nombre de fichiers restant à traiter (égal au pas total moins l'index de la boucle) : il reste %d fichiers, avec %d qui varie intrinsèquement au fur et à mesure ! Un compte à rebours finalement !

    Merci

    Si vous avez une idée de titre plus explicite je suis preneur ...

  2. #2
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    je sais que ca se fait, c'est sur, mais je ne sais pas comment..., desole
    du coup par contre, si quelqu'un le sait, je suis aussi preneur...

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par babar56
    Bonjour,

    Voici ma question : j'ai une boucle assez lourde, dans le sens où elle crée un fichier à chaque itération, à raison d'une à deux seconde par itération, pour un total d'une centaine d'itérations en général.

    J'aimerais que l'utilisateur soit informé de l'évolution : mais je ne veux pas placer un bête printf dans ma boucle, et ainsi empiler une centaine de messages ...

    Serait-il possible d'avoir une seule ligne "dynamique" qui m'affiche le nombre de fichiers restant à traiter (égal au pas total moins l'index de la boucle) : il reste %d fichiers, avec %d qui varie intrinsèquement au fur et à mesure ! Un compte à rebours finalement !

    Merci

    Si vous avez une idée de titre plus explicite je suis preneur ...
    Un printf() avec \r...

    Exemple (Windows)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #include <stdio.h>
    #include <windows.h>
     
    int main()
    {
       int n = 10;
     
       while (n > 0)
       {
          printf ("\r%3d", n);
          fflush (stdout);
          n--;
     
          /* simule le traitement */
          Sleep(1000);
       }
       printf ("\r%3d\n", n);
       return 0;
    }

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Ou avec '\b'.
    Sinon quel est le header pour le "sleep"?

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    windows.h mais c'est Sleep avec un grand S

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par seriousme
    Ou avec '\b'.
    L'effet de \b n'est pas portable... De plus, il recule éventuellement de 1 caractère. Il en faut donc plusieurs...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #include <stdio.h>
    #include <windows.h>
     
    int main()
    {
       int n = 10;
     
       printf ("Decompte : %3d", n);
     
       while (n > 0)
       {
          printf ("\b\b\b%3d", n);
          fflush (stdout);
          n--;
     
          /* simule le traitement */
          Sleep(1000);
       }
       printf ("\b\b\b%3d\n", n);
       return 0;
    }
    Sinon quel est le header pour le "sleep"?
    J'ai pas vu de "sleep"...

  7. #7
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    En effet "Sleep" est bien dans "windows.h" plus précisément dans "winbase.h".

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par seriousme
    En effet "Sleep" est bien dans "windows.h" plus précisément dans "winbase.h".
    Et c'est pas ce que j'avais mis dans mon code ?

    http://msdn.microsoft.com/library/de...base/sleep.asp

    Microsoft demande à ce qu'on inclue <windows.h> et non <winbase.h>

  9. #9
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Et c'est pas ce que j'avais mis dans mon code ?
    Je n'ai pas dit le contraire, au contraire.

  10. #10
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Un printf() avec \r...

    Exemple (Windows)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #include <stdio.h>
    #include <windows.h>
     
    int main()
    {
       int n = 10;
     
       while (n > 0)
       {
          printf ("\r%3d", n);
          fflush (stdout);
          n--;
     
          /* simule le traitement */
          Sleep(1000);
       }
       printf ("\r%3d\n", n);
       return 0;
    }
    fflush (stdout);Ca sert a quoi?

  11. #11
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    "fflush" sert à purger stdout pour ne pas se retrouver avec des caractères d'anciens affichages.

  12. #12
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Microsoft demande à ce qu'on inclue <windows.h> et non <winbase.h>
    En effet; pour que tous les types Windows soient disponibles, DWORD en particulier.

  13. #13
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par seriousme
    "fflush" sert à purger stdout pour ne pas se retrouver avec des caractères d'anciens affichages.
    Mais les quels?(ancien affichage?)J'ai du mal a saisir...

  14. #14
    Membre averti
    Inscrit en
    Février 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 70
    Par défaut
    Citation Envoyé par miron
    Mais les quels?(ancien affichage?)J'ai du mal a saisir...
    On m'a appris à utiliser cette fonction comme ça : lorsqu'une boucle qui contient une erreur, par exemple, suit directement un printf, alors le programme peut très bien buguer sans afficher le printf, bien que ce dernier soit placé avant l'erreur. Un fflush(stdout); permet d'afficher le printf !

  15. #15
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par seriousme
    "fflush" sert à purger stdout pour ne pas se retrouver avec des caractères d'anciens affichages.
    Mais keskidi ?

  16. #16
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par miron
    fflush (stdout);Ca sert a quoi?
    http://emmanuel-delahaye.developpez....#fflush_stdout

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par babar56
    On m'a appris à utiliser cette fonction comme ça : lorsqu'une boucle qui contient une erreur, par exemple, suit directement un printf, alors le programme peut très bien buguer sans afficher le printf, bien que ce dernier soit placé avant l'erreur. Un fflush(stdout); permet d'afficher le printf !
    Mais keskidi ?

  18. #18
    Membre averti
    Inscrit en
    Février 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 70
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Mais keskidi ?
    C'était pourtant clair il me semble ! Cependant, je tiens pas forcément ça d'une source fiable ...

  19. #19
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par babar56
    C'était pourtant clair il me semble ! Cependant, je tiens pas forcément ça d'une source fiable ...
    C'est clair mais c'est n'importe quoi. J'ai passé un lien qui donne la bonne explication.

  20. #20
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Mais keskidi ?
    Je reconnais que mon explication n'est pas claire mais c'est bien le principe de "fflush":
    fflush - Vider les buffers d'un flux.
    dans le "man":
    http://man.developpez.com/man3/fflush.3.php

Discussions similaires

  1. Problème d'affichage dynamique d'une liste
    Par bor1s dans le forum ASP
    Réponses: 2
    Dernier message: 18/11/2005, 16h18
  2. Probleme d'affichage dynamique de ma base
    Par kudawoo2002 dans le forum ASP
    Réponses: 3
    Dernier message: 18/11/2005, 09h22
  3. Réponses: 1
    Dernier message: 08/07/2005, 02h46
  4. [VB.NET] - affichage dynamique dans un tableau
    Par karibouxe dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/06/2005, 15h07
  5. affichage dynamique en fonction des données en base
    Par jengo dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/10/2004, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo