为什么退格'\ b'在C ++中不起作用?

时间:2014-09-15 09:43:38

标签: c++

我创建了一个循环,因为它很长,我想看到进展。所以,我添加了一些退格字符,用于在同一行上打印循环的百分比:

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。是否可以进行某种优化,直到缓冲区已满才能打印?有关如何使其工作的任何想法?

1 个答案:

答案 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;
}