Avec une largeur fixe de votre sortie, utilisez quelque chose comme ce qui suit:
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; // for demonstration only
}
std::cout << std::endl;
http://ideone.com/Yg8NKj
[> ] 0 %
[===========> ] 15 %
[======================> ] 31 %
[=================================> ] 47 %
[============================================> ] 63 %
[========================================================> ] 80 %
[===================================================================> ] 96 %
Notez que cette sortie est affichée sur une ligne au-dessous les uns des autres, mais dans un émulateur de terminal (je pense aussi en ligne de commande de Windows), il sera imprimé sur la même ligne.
À la fin, n'oubliez pas d'imprimer un retour à la ligne avant de l'imprimer plus de choses.
Si vous souhaitez supprimer de la barre à la fin, vous devez le remplacer avec des espaces, pour imprimer quelque chose de plus court, comme par exemple "Done."
.
Aussi, la même chose peut bien sûr être fait à l'aide de printf
C; adapter le code ci-dessus devrait être straight-forward.