Forum Programmation.c c sous linux

Posté par  .
Étiquettes : aucune
0
28
oct.
2005
bon mon petit problème provient de l'éxecution d'un programme avec la fontion sleep().
j'ai un prog


#include <lt;stdio.h>
#include <lt;time.h>
int main(void)
{
int i;
for(i=1;i<=50;i++){
i=i+i;
sleep(1);
printf("#");
}
printf("\n");
printf("i= %i\n",i);
return 0;
}


je voulais que ça fasse une sorte de barre de progression et en fait à l'exécution, ça attend 5 sec sans rien faire en apparence et ça affiche
#####
i= 63
voila je sais pas trop ce qui va pas aider moi svp
jo
autre chose, comment on écrit du code avec des balises ds le forum?

config:
mandriva linux 2005 EL
compiler avec gcc
  • # printf fonctionne comme buffer

    Posté par  (site web personnel) . Évalué à 3.

    Salut,

    en espérant ne pas dire de bêtise, ton printf fonctionne avec un buffer et n'affiche rien tant que celui-ci n'est pas rempli ou qu'un \n n'intervienne quelque part.

    Alors comment vider le buffer, si je ne me trompe pas, il existe une fonction flush mais je ne sais pas si c'est standard et si ça fonctionne bien.

    @+
  • # pb de buffer

    Posté par  . Évalué à 3.

    ajoute :

    fflush(stdout);

    après chaque printf comme le signale elloco...
    Pour complément, le \n dans un printf ne vide pas nécessairement le buffer...
    • [^] # Re: pb de buffer

      Posté par  . Évalué à 1.

      ça y est ça marche, les "#" s"affiche les uns après les autres, mais je me demande tjrs pourquoi ça n'attend pas 50 secondes et n'affiche pas 50 "#"?
      • [^] # Re: pb de buffer

        Posté par  . Évalué à 3.

        pour avoir ce comportement, supprime la ligne i=i+i qui fait courrir ta boucle plus vite que tu ne le souhaites
    • [^] # Re: pb de buffer

      Posté par  (site web personnel) . Évalué à 2.

      Tu peux aussi regarder dans le man les pages sur setbuf(3) et setvbuf(3) pour plus de détails sur le sujet (différents types de bufférisation, comment changer/supprimer le buffer, etc).
      • [^] # Re: pb de buffer

        Posté par  . Évalué à 1.

        ah oui merci bcp j'avais pas changer de variable
        merci
        • [^] # Re: pb de buffer

          Posté par  . Évalué à -1.

          j'ai entrevu chai pplus ou une fonction qui attend mais ou on met un temps en millisecondes, pourriez vous m'indiquez laquelle?
          • [^] # Re: pb de buffer

            Posté par  . Évalué à 3.

            usleep(useconds_t usec) est une des fonctions les plus simples pour faire une pause inférieure à une seconde; elle s'utilise comme sleep, mais avec des microsecondes.

            Toutefois, cette fonction ne fait pas partie de la bibliothèque standard et est déclarée obsolète.
            • [^] # Re: pb de buffer

              Posté par  (site web personnel) . Évalué à 3.

              Il y a nanosleep(3) qui est dans le standard POSIX, mais son fonctionnement est un peu différent.
              • [^] # Re: pb de buffer

                Posté par  . Évalué à 0.

                merci pour tte ces réponses, j'ai réussi avec usleep, ça marche
                ça me fait une barre de progression
                merci à tous

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.