Ecrire sur le terminal sans avancer le pointeur

Ecrire sur le terminal sans avancer le pointeur - C - Programmation

Marsh Posté le 18-04-2010 à 23:54:21    

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

Reply

Marsh Posté le 18-04-2010 à 23:54:21   

Reply

Marsh Posté le 19-04-2010 à 02:12:21    

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é!  --
Reply

Marsh Posté le 19-04-2010 à 09:08:32    

Merci beaucoup pour votre aide!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed