如何更新终端中的输出字段而不输出新行?

时间:2012-06-11 15:45:57

标签: c++ shell terminal

  

可能重复:
  How to update a printed message in terminal without reprinting (Linux)

我有c ++代码,执行一些模拟。

我想显示模拟的百分比,但我不希望每一步输出一个新行,例如

1%

%2

3%

...

有没有办法在c ++或shell脚本中显示进度而不创建新行?

由于

编辑1

任何人都知道如何更新我的个人网页上的数字而不刷新整个页面?

由于

编辑2

double N=0;
forAll (internalIDs_, i) {
    N++;
    double percent = 100*N/internalIDs_.size();
    // Info<< "\rProgress: " << percent << "%" << endl;
    printf("\r[%6.4f%%]",percent);}

终端光标通过数字循环闪烁,非常烦人,如何摆脱这个?

2 个答案:

答案 0 :(得分:23)

用于此目的的技巧是返回当前行中的第一个位置,而不是前进到下一行。

这是通过将\r字符(回车)写入终端/标准输出来完成的。

答案 1 :(得分:15)

cout << "\r%1";
cout << "\r%2";
cout << "\r%3";

...

\ r \ n-在行首开始;

但! 如果:

cout << "\rsomelongmessage";
cout << "\rshort";

然后你出去了:

shortongmessage

因为:

somelongmessage
^^^^^
short

但你可以:

cout << "\rsomelongmessage";
cout << "\rshort          ";

然后你终于得到了:

short