我的程序中有这样的代码:
std :: cout << process_prompt << std :: left << std :: setw( 40 ) << "Looping on tree: clust_tree.";
some_function();
std :: cout << std :: string( 52, '\b' );
some_function()有一个循环:
for( Int_t i = 0; i < n_entries; ++i )
{
(some stuff...)
if( i % 100000 == 0 )
{
percent_done = static_cast<float>(i) / n_entries;
std :: cout << std :: setw( 4 ) << static_cast<int>(percent_done * 100) << "p" << std :: flush;
std :: cout << std :: string( 5, '\b' ) << std :: flush;
}
}
process_prompt只是一种奇特的方式,我用它来写一条彩色的消息说&#34;处理:&#34;。
我期望发生的事情是(每行都是前一行的更新):
Process: Looping on tree: clust_tree. 0 p
Process: Looping on tree: clust_tree. 10 p
...
实际发生的事情:
Process: Looping on tree: clust_tree. 0 p
12 pss: Looping on tree: clust_tree. 0 p
54 pss: Looping on tree: clust_tree. 0 p
不知何故,我的光标始终移动到行的beginnig。有人能告诉我我做错了什么吗?谢谢你的回复!
发现错误: 我有一些其他代码部分在循环中输出单个/ b字符。
答案 0 :(得分:1)
注意:这是问题的不是答案,不确定这会对在线编译器有效,因此这里有完整示例的代码..
这个完整的例子适用于我(c ++ 11,gcc 4.8.2)
#include <iostream>
#include <chrono>
#include <thread>
#include <iomanip>
using namespace std;
int main(void) {
cout << "Completed " << flush;
for (auto i = 1; i <= 100; ++i) {
cout << setw(4) << i << "%" << flush << string(5, '\b') << flush;
this_thread::sleep_for(chrono::milliseconds(100));
}
cout << endl << "Done" << endl;
}
答案 1 :(得分:0)
好吧我好像找到了答案,实际上我还有一个额外的&#39; / b&#39;对于每个循环。谢谢大家!