4 votes

C++ comment écraser un caractère dans la console, le retour chariot au début de la ligne ne semble pas fonctionner

Ma question est la suivante : comment faire pour que les nombres 10 - 0 s'impriment sur la même ligne, en s'écrasant les uns les autres, en utilisant un compilateur WIN32 ou GNUC d'une manière simple, comme dans mon code ci-dessous :

Voici ce que j'ai pour l'instant :

#include <iomanip>
#include <iostream>
using namespace std;

#ifdef __GNUC__
#include <unistd.h>
#elif defined _WIN32
#include <cstdlib>
#endif

int main()
{

  cout << "CTRL=C to exit...\n";

  for (int units = 10; units > 0; units--)
  {
    cout << units << '\r';
    cout.flush();
#ifdef __GNUC__
    sleep(1); //one second
#elif defined _WIN32
    _sleep(1000); //one thousand milliseconds
#endif

    //cout << "\r";// CR

  }

  return 0;
} //main

Mais il ne s'agit que d'une impression :

10 9 8 7 6 5 4 3 2 1

4voto

Jerry Coffin Points 237758

J'ai fait quelques modifications vraiment triviales (principalement pour le nettoyer et le rendre plus lisible) :

#include <iomanip>
#include <iostream>
using namespace std;

#ifdef __GNUC__
#include <unistd.h>
#define pause(n) sleep(n)
#elif defined _WIN32
#include <cstdlib>
#define pause(n) _sleep((n)*1000)
#endif

int main()
{

  cout << "CTRL=C to exit...\n";

  for (int units = 10; units > -1; units--)
  {
    cout << setw(2) << setprecision(2) << units << '\r';
    cout.flush();
    pause(1);
  }
  return 0;
}

Cela a fonctionné correctement avec VC++ et Cygwin. Si cela ne fonctionne pas sous mingw, il me semble qu'il s'agit d'un problème d'implémentation.

1voto

eordano Points 151

Je vous recommande d'utiliser ncurses ou une autre bibliothèque pour cela, il n'y a pas de méthode standard pour le faire.

0voto

Ben Voigt Points 151460

Avez-vous essayé le retour arrière '\b' caractère ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X