22

可能重复:
如何在不重新打印的情况下更新终端中的打印消息(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);}

终端光标一直在数字循环闪烁,很烦人,如何摆脱这个?

4

2 回答 2

25

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

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

于 2012-06-11T15:48:48.593 回答
18
cout << "\r%1";
cout << "\r%2";
cout << "\r%3";

...

\r - 在行首移动;

但!如果 :

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

然后你出去:

shortongmessage

因为:

somelongmessage
^^^^^
short

但是你可以:

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

然后你最终得到:

short
于 2012-06-11T15:53:58.423 回答