Обычно я ставлю возврат каретки после информации о ходе выполнения. Таким образом, любой другой вывод будет выглядеть нормальным (если в строке достаточно символов, чтобы полностью перезаписать информацию о ходе выполнения).
cerr<<percentage<<"% \r";
Кстати, я предпочитаю использовать cerr вместо cout для такого рода информации о состоянии / диагностике, чтобы cout можно было зарезервировать для реального контента. Таким образом, вы можете перенаправить обычный вывод программы в файл и по-прежнему видеть прогресс в консоли. Кроме того, для cerr вам не нужно использовать «flush».