我创建了一个循环,因为它很长,我想看到进展。所以,我添加了一些退格字符,用于在同一行上打印循环的百分比:
std::size_t photoCntr = 0;
for (std::vector< VerifObj >::const_iterator itVOV = verifObjVector.begin(); itVOV != verifObjVector.end(); itVOV++)
{
// some operations
std::cout << "\b\b\b\b" << std::setw(3) << static_cast< int >(100.f * ++photoCntr / verifObjVector.size()) << "%";
}
在控制台中,直到循环结束时才会打印任何内容,然后打印100%
。循环需要很长时间(几分钟)。我使用的是Ubuntu 14.04和g ++ 11。是否可以进行某种优化,直到缓冲区已满才能打印?有关如何使其工作的任何想法?
答案 0 :(得分:4)
您需要刷新输出缓冲区:
std::cout.flush();
您也可以使用此风格:
std::cout << "Stuff" << std::flush;
为了彻底,这个完整的程序打印出越来越多的进展:
#include <iostream>
#include <iomanip>
#include <chrono>
#include <thread>
int main() {
for (int i=0; i<100; ++i) {
std::cout << "\b\b\b\b" << std::setw(3) << i << '%' << std::flush;
std::this_thread::sleep_for(std::chrono::milliseconds(30));
}
std::cout << "\b\b\b\b100%" << std::endl;
}