Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
738 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Ecrire sur le terminal sans avancer le pointeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ecrire sur le terminal sans avancer le pointeur

n°1985352
atmakefka
Posté le 18-04-2010 à 23:54:21  profilanswer
 

Bonjour,
Je cherche comment écrire "toujours au même endroit" sur la sortie standard.
Je m'explique : quand on installe un paquet via sudo apt-get install <paquet>, pendant l'installation, on voit les pourcentages d'avancement , de téléchargement, etc.
Ces pourcentage évoluent sans afficher de nouvelles lignes, les caractères étant remplacés.
Par exemple, on voit le message:
 
Construction de l'arbre des dépendances ... 50%
50 évolue sans avoir besoin d'afficher de nouvelle ligne, comme si les caractères étaient remplacés.
Comment fait-on cela en C ?
 
Merci pour votre aide

mood
Publicité
Posté le 18-04-2010 à 23:54:21  profilanswer
 

n°1985362
gilou
Modérateur
Modzilla
Posté le 19-04-2010 à 02:12:21  profilanswer
 

printf("\r" ); fait revenir en début de ligne.

 

Un petit exemple qui fait ce que vous mentionnez, pour vous illustrer cela.
[il marche sous windows, sous unix, il faut peut être remplacer _sleep() par sleep()]

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. int main(int argc, char *argv[])
  4. {
  5.   int i;
  6.   printf("\n\n" );
  7.   for (i=0;i<=100;i++) {
  8.     printf("Construction de l'arbre des dependances ... %02i%% \r", i);
  9.     _sleep(250);
  10.   }
  11.   _sleep(3000);
  12.   return EXIT_SUCCESS;
  13. }
 

Note: Il faut faire attention a la taille des lignes, car un \r ne provoque pas l'effacement des caractères de la ligne, comme on peut le voir ici:

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. int main(int argc, char *argv[])
  4. {
  5.   printf("\n\nabcdefghijklmnopqrstuvwxyz" );
  6.   _sleep(1000);
  7.   printf("\r0123456789" );
  8.   _sleep(3000);
  9.   return EXIT_SUCCESS;
  10. }


les caractères klm...xyz restent affichés
Si on remplace le second appel à printf par
  printf("\r0123456789                " );
avec 16 blancs finaux, par contre, on aura le résultat recherché.

 

Une variante du premier exemple

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. int main(int argc, char *argv[])
  4. {
  5.   int i, j, k = 0;
  6.   char spin[4] = {'/', '-', '\\', '|'};
  7.   printf("\n\n" );
  8.   for (i=0;i<100;i++) {
  9.     for (j=0;j<12;j++) {
  10.       printf("Construction de l'arbre des dependances ... %02i%% %c\r", i, spin[k%4]);
  11.       _sleep(35);
  12.       ++k;
  13.     }
  14.   }
  15.   printf("Construction de l'arbre des dependances ... 100%% " );
  16.   _sleep(3000);
  17.   return EXIT_SUCCESS;
  18. }
 

A+,


Message édité par gilou le 19-04-2010 à 02:54:37

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1985372
atmakefka
Posté le 19-04-2010 à 09:08:32  profilanswer
 

Merci beaucoup pour votre aide!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Ecrire sur le terminal sans avancer le pointeur

 

Sujets relatifs
[Scheme] Ecrire dans une boiteVector et pointeur
Comment écrire l'uptime du serveur dans une page php ?écrire plus que 32767 octets dans un fichier!!
écrire en C des algorithmes de graphes !! Please HELP !!Boucle for et pointeur
[C] probleme sprintf et pointeur :SEcrire un client qui se connecte a une socket & java.nio
référence et pointeurbizarre equivalence pointeur /tableau !!!
Plus de sujets relatifs à : Ecrire sur le terminal sans avancer le pointeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR