Как обновить поле вывода в терминале без вывода новой строки?

Возможный дубликат:
Как обновить печатное сообщение в терминале без перепечатки (Linux)

У меня есть код С++, выполняющий некоторые симуляции.

Я хочу показать процент моего моделирования, но я не хочу выводить новую строку на каждый шаг, например

% 1

% 2

% 3

...

Есть ли способ в С++ или в сценариях оболочки показывать прогресс без создания новых строк?

Спасибо

Изменить 1

Кто-нибудь знает, как обновить номер на моей личной веб-странице, не обновляя всю страницу?

Спасибо

Изменить 2

double N=0;
forAll (internalIDs_, i) {
    N++;
    double percent = 100*N/internalIDs_.size();
    // Info<< "\rProgress: " << percent << "%" << endl;
    printf("\r[%6.4f%%]",percent);}

Терминальный курсор продолжает циклически мигать по номерам, очень раздражает, как избавиться от этого?

Ответы

Ответ 1

Уловкой, используемой для этого, является возврат к первой позиции в текущей строке вместо перехода к следующей строке.

Это делается путем записи символа \r (возврат каретки) в терминал/stdout.

Ответ 2

cout << "\r%1";
cout << "\r%2";
cout << "\r%3";

...

\ r - перемещение в начале строки;

но! если:

cout << "\rsomelongmessage";
cout << "\rshort";

то вы получите:

shortongmessage

из-за:

somelongmessage
^^^^^
short

но вы можете:

cout << "\rsomelongmessage";
cout << "\rshort          ";

то вы получите наконец:

short