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 :

Temporisation non respectée


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Temporisation non respectée
    Bonjour ,

    je souhaite réaliser des temporisation entre deux actions mais ça ne se passe pas comme prévu .

    le but . Afficher une chaîne de caractère , temporiser , puis revenir un caractère en arrière , temporiser , puis ajouter un caractère ,puis temporiser avant de quitter

    quand je lance le programme il s'écoule un certain temps puis affiche directement la chaîne modifiée .

    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
    23
    24
    25
    26
    27
    28
    29
     
               #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <errno.h>
    #include <sys/wait.h>
    #include <sys/types.h>
    #include <string.h>
    #include <time.h>
     
     
    int main (void) 
    {
     
     
       printf("abcdefgh");
       sleep(2);
       printf("\b");
       sleep(2);
       printf("a");
       sleep(2) ;  
       printf(" \n");
     
     
     
      return 0;
     
     
    }

    si je remplace sleep par une fonction perso j'ai le même résultat

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
                 #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <errno.h>
    #include <sys/wait.h>
    #include <sys/types.h>
    #include <string.h>
    #include <time.h>
     
     
     
    void temporise(unsigned long temps)
    {
      time_t heure_debut;
      time_t heure_fin;
      time_t heure_actuelle;
     
       heure_debut=time(NULL);
       heure_fin=heure_debut+temps;
       while( time(NULL) <= heure_fin  ){}
     
    }
     
     
    int main (void) 
    {
     
     
       printf("abcdefgh");
       temporise(2);
       printf("\b");
       temporise(2);
       printf("a");
       temporise(2);
       printf("\n");
     
     
     
      return 0;
     
     
    }

    question : à quoi est ce dû ? y a t il un effet de bord ? Comment inserer des temporisations qui soient respectés

    Merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 631
    Points
    23 631
    Par défaut
    Les entrées et sorties standard sont bufferisées par défaut. Ta sortie standard est donc configurée pour ne vider le tampon que lorsqu'il est plein où lorsque tu fais un retour à la ligne.

    Pour corriger ça, soit tu fais fflush(stdout); après chaque printf(), soit tu joues directement avec setbuf().

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Pour corriger ça, soit tu fais fflush(stdout); après chaque printf()
    Bonsoir ,


    j'avais déjà rencontré le problème de tampon avec la fonction scanf mais j'avais complétement oublié

    merci pour la solution .ça fonctionne maintenant

+ Répondre à la discussion
Cette discussion est résolue.

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