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 :

positionner le curseur dans la console


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 136
    Points : 133
    Points
    133
    Par défaut positionner le curseur dans la console
    Bonjour,
    Comment fait-on pour positionner le curseur dans la console dans un programme C
    par exemple pour faire une barre de progression
    si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      printf("[=====     ] 50%\n");
      printf("[=======   ] 70%\n");
    j'ai deux lignes dans ma console. Ce que je voudrais c'est que le deuxième affichage remplace le premier. Un peu comme le programme top qui afficher toujours au même endroit.

  2. #2
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Ça va dépendre de pas mal de choses:
    - ton OS
    - ta console

    Si ta console gère les séquences d'échappement ESC (ou \033) puis une sequence de caracteres pour agir sur la console (déplacement du curseur, mode d'affichage (bold...)) regarde de ce côté (man terminfo contient pas mal d'info mais c'est dur de s'y retrouver). Pour le retour à la ligne je ne sais plus la séquence. Google doit pouvoir t'aider.

    Sinon regarde les interfaces comme conio sous DOS/Windows ou ncurses sous *NIX.

  3. #3
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Si ton terminal le supporte, utilise '\r' au lieu de '\n'. Sinon, il faudra s'epuiser a utiliser les conio/[n]curses...

  4. #4
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Salut, sinon si t'as rien d'écrit avant ta barre de progression tu peux tout simplement rafraichir la progression graçe à un cls de l'écran

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je ne crois pas que

    soit très portable...

    Jc

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par DaZumba
    Si ton terminal le supporte, utilise '\r' au lieu de '\n'. Sinon, il faudra s'epuiser a utiliser les conio/[n]curses...
    Le carctère \r est standard et permet de retourner au début de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("[=====     ] 50%");
    printf("\r[=======   ] 70%");
    Devrait faire l'affaire

  7. #7
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Oui, \r est standard, mais son effet est variable. Certaines consoles (les plus modernes, notamment), retourneront au debut de la ligne en cours. D'autres vont le considerer comme un \n et produiront une nouvelle ligne.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    par contre, pour être sûr d'afficher, il faudra un fflush(stdout), en espérant que ça ne force pas le passage à la ligne suivante...

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 136
    Points : 133
    Points
    133
    Par défaut
    merci à tous.
    mon programme est sous linux, et il n'a _absolument pas_ vocation à être portable.

    - pour ce qui est de \r, le nouveau message écrit n'est pas forcément plus long que le précédent (pas grave , je peux rajouter des espaces). Mais le problème est que je gère plusieurs lignes.

    - system("clear") : à priori ça fait l'affaire, mais c'est un peu lourd non ? Vu que system fera un fork/execve à chaque fois. cet appel va peut être à lui seul consommer plus de ressources que tout le reste de mon programme.
    (je suis dans une boucle lorsque j'affiche les infos)

    - ncurses : c'est l'idéal mais c'est toute une lib à apprendre

    N'y aurait t'il pas des fonctions dans le genre de la commande tput

    Si ça n'existe pas je vais peut-être me rabattre sur system

Discussions similaires

  1. Positionner le curseur dans un fichier
    Par be_tnt dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 15/05/2006, 14h30
  2. [Forms 6i] Positionnement du curseur dans une liste
    Par Veve44 dans le forum Oracle
    Réponses: 2
    Dernier message: 13/12/2005, 16h28
  3. Réponses: 3
    Dernier message: 27/11/2005, 01h19
  4. Positionner le curseur dans un champ
    Par Smint dans le forum Access
    Réponses: 17
    Dernier message: 23/09/2005, 21h02
  5. Réponses: 6
    Dernier message: 06/05/2004, 09h05

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