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 :

timer sur une ligne


Sujet :

C

  1. #1
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut timer sur une ligne
    Bonjour,

    est il possible de faire un printf qui "chasse" le précédent pour pouvoir print sur une ligne ?

    Je veux éviter ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    0.2.50
    0.2.60
    0.2.70
    0.2.80
    0.2.90
    0.3.00
    0.3.10
    0.3.20
    et imiter le vrai effet d'un timer ou la position du timer ne bouge pas et reste à la première ligne .
    j'ai fais quelques tests avec un \r mais rien de vraiment fonctionnel. quand j'utilise un \r à la fin de mon printf (sans \n),rien ne s'affiche..

    Merci d'avance pour vos conseils !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il n'existe pas de système portable pour effectuer ce que tu demandes (c'est à dire, disponible dans la bibliothèque officiel du C).

    Si tu es sur windows, dans la bibliothèque conio.h qui fournit la fonction clrscr() qui fait ce que tu souhaites.

    Si tu es sous Linux, tu dépends du terminal sur lequel tu te trouves.
    Soit tu passes par une bibliothèque dédié ( comme curse/ncurse ).
    Soit tu passes par une combinaison spécifique de caractères ASCII. "Normalement", c'est compatible avec une grosse partie des terminaux sous Linux.
    #define clear() printf("\033[H\033[J")
    Dernière modification par Invité ; 13/06/2016 à 09h23.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par awesomeman Voir le message
    est il possible de faire un printf qui "chasse" le précédent pour pouvoir print sur une ligne ?

    (snip)

    j'ai fais quelques tests avec un \r mais rien de vraiment fonctionnel. quand j'utilise un \r à la fin de mon printf (sans \n),rien ne s'affiche..
    La méthode classique, c'est \r accompagné d'un fflush(stdout) pour forcer l'affichage sans attendre le \n.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Ce qui fonctionne en général dans les terminaux POSIX (et également sous cmd.exe, je crois) comme l'ont dit les précédents intervenants, c'est :
    • \r (retour chariot) : retour à la ligne (courante) ;
    • \b (backspace) : retour d'un caractère en arrière.

    Attention : ces caractères modifient seulement la position du curseur, ils n'effacent pas du même coup les caractères précédemment affichés.

    Exemple :
    Code knockknock.c : 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
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
     
     
    #define sleep_s(t)  usleep((int)((t) * 1000000))
    #define sleep_ms(t) usleep((int)((t) * 1000   ))
     
     
    /* prints out a string "typewriting-style" */
    void print_typewriting(const char *msg, unsigned int delay) {
        while (*msg) {
            putc(*msg, stdout);
            fflush(stdout);
            sleep_ms(delay);
     
            ++msg;
        }
    }
     
    int main(int argc, char *argv[]) {
        print_typewriting("Knock knock, Neo.", 120);
        sleep_s(2);
     
        print_typewriting("\rFollow the nice piece of ass", 120);
     
        // Oops..
        const unsigned int len = (unsigned int)strlen("nice piece of ass");
        for (unsigned int i = 0; i < len; ++i) {
            printf("\b \b");
            fflush(stdout);
            sleep_ms(60);
        }
     
        print_typewriting("\"white rabbit\"...\n", 120);
        sleep_s(2);
     
        return 0;
    }

Discussions similaires

  1. Réponses: 13
    Dernier message: 12/07/2005, 10h14
  2. div et innerHTML : tout sur une ligne?
    Par LineLe dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/04/2005, 11h15
  3. nombres d'images sur une lign automatique
    Par AnKhCHFR dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/03/2005, 11h52
  4. Lien sur une ligne de tableau
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/02/2005, 11h36
  5. pointer sur une ligne d'un TStringGrid
    Par jeannot27 dans le forum C++Builder
    Réponses: 7
    Dernier message: 20/10/2004, 10h56

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