А вы делали sync_with_stdio? Если нет, то сделайте, либо не мешайте iostream и stdio вместе. Может быть ваша функция просто вызывается несколько раз подряд и повторяющиеся % в конце (если я правильно понял, что вы имеете ввиду) - просто не затертые остатки предыдущих вызовов? Например, вы подряд выводите три строки:
******%
*****%
****%
каждая следующая затирает только префикс предыдущей, а % в хвосте остается. В этом случае имеет смысл поиграться с манипуляторами fixed, setw и setfill из iomanip