C ++, как перезаписать символ в консоли, возврат каретки в начало строки не работает - PullRequest
4 голосов
/ 28 марта 2011

Мой вопрос: как мне заставить числа 10 - 0 печатать в одной строке, перезаписывая друг друга, используя компилятор WIN32 или GNUC, простым способом, как мой код ниже:

Этовот что у меня есть:

#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

Но это только печатает:

10 9 8 7 6 5 4 3 2 1

Ответы [ 3 ]

4 голосов
/ 28 марта 2011

Я сделал несколько действительно тривиальных изменений (в основном просто для того, чтобы очистить его и сделать его более читабельным):

#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;
}

Это отлично работало и с VC ++, и с Cygwin.Если он не работает под mingw, для меня это звучит как проблема реализации.

1 голос
/ 28 марта 2011

Я рекомендую вам использовать ncurses или другую библиотеку для этого, нет стандартизированного способа сделать это.

0 голосов
/ 28 марта 2011

Вы пробовали символ возврата '\b'?

...