终端中的光标闪烁消除,如何?

新手上路,请多包涵

我使用以下几行在我的 c++ 程序中输出模拟的进度信息,

 double N=0;
double percent=0;
double total = 1000000;
for (int i; i<total; ++i)
{
    percent = 100*i/total;
    printf("\r[%6.4f%%]",percent);
}

它工作正常!

但是问题是我看到终端光标一直在数字中循环闪烁,这很烦人,有谁知道如何摆脱这个?

我见过一些程序,如 wget 或 ubuntu apt,它们也使用进度条或百分比,但它们似乎没有光标闪烁的问题,我想知道它们是怎么做到的?

谢谢!

原文由 Daniel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 961
2 个回答

只是一个猜测:尝试使用适当数量的“\b”(退格)字符而不是“\r”。

== 编辑 ==

我不是 Linux shell 向导,但这可能有效:

 system("setterm -cursor off");
// ...display percentages...
system("setterm -cursor on");

不要忘记 #include <cstdlib><iostream>

原文由 kol 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以在 DECSMDECRM 中使用 DECTCEM (DEC 文本光标启用模式)模式隐藏和显示光标:

 fputs("\e[?25l", stdout); /* hide the cursor */

fputs("\e[?25h", stdout); /* show the cursor */

原文由 LeoNerd 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题