З фіксованою шириною виводу використовуйте щось на зразок наступного:
float progress = 0.0;
while (progress < 1.0) {
int barWidth = 70;
std::cout << "[";
int pos = barWidth * progress;
for (int i = 0; i < barWidth; ++i) {
if (i < pos) std::cout << "=";
else if (i == pos) std::cout << ">";
else std::cout << " ";
}
std::cout << "] " << int(progress * 100.0) << " %\r";
std::cout.flush();
progress += 0.16;
}
std::cout << std::endl;
http://ideone.com/Yg8NKj
[> ] 0 %
[===========> ] 15 %
[======================> ] 31 %
[=================================> ] 47 %
[============================================> ] 63 %
[========================================================> ] 80 %
[===================================================================> ] 96 %
Зверніть увагу, що цей результат відображається на один рядок один під одним, але в емуляторі терміналу (я думаю, що і в командному рядку Windows) він буде надрукований на тому самому рядку .
В самому кінці не забудьте надрукувати новий рядок, перш ніж друкувати більше матеріалів.
Якщо ви хочете зняти смужку в кінці, вам доведеться перезаписати її пробілами, щоб надрукувати щось коротше, наприклад, наприклад "Done."
.
Крім того, те ж саме, звичайно, можна зробити, використовуючи printf
C; адаптація коду вище повинна бути прямою.