ldo*_*dog 40 c++ linux terminal text
我想为我的终端应用程序创建一个进度条,它的工作方式如下:
[XXXXXXX ]
Run Code Online (Sandbox Code Playgroud)
这将在过程完成之前提供剩余时间的可视指示.
我知道我可以通过将它们添加到字符串然后只是printf来打印越来越多的X,但这看起来像:
[XXXXXXX ]
[XXXXXXXX ]
[XXXXXXXXX ]
[XXXXXXXXXX ]
Run Code Online (Sandbox Code Playgroud)
或类似的东西(显然你可以玩间距.)但这在视觉上不美观.有没有办法用新文本更新终端中的打印文本而无需重新打印?这都是linux,c ++.
Mic*_*ker 45
尝试使用\r而不是\n在打印新的"版本"时使用.
for(int i=0;i<=100;++i) printf("\r[%3d%%]",i);
printf("\n");
Run Code Online (Sandbox Code Playgroud)
像这样的东西:
std::stringstream out;
for (int i = 0; i< 10; i++)
{
out << "X";
cout << "\r" << "[" << out.str() << "]";
}
Run Code Online (Sandbox Code Playgroud)
偷偷摸摸的位是回车符"\ r",它使光标移动到行的开头而不会下到下一行.
其他人已经指出,您可以使用\r返回到当前行的开头,并覆盖整行。
另一种可能性是使用退格字符 ("\b") 擦除一些空格,并仅覆盖这些空格。这有几个优点。首先,它显然避免了必须重新生成线路中的所有内容,这有时会带来轻微的痛苦(尽管这很不寻常)。其次,它可以避免在显示数据时遇到一些麻烦(例如)在您编写时缩小尺寸——例如,如果您显示从 100 到 0 的倒计时,\r您必须小心覆盖整个前一个长度,或者您的倒计时将从(例如)100 到 990(即,保持前一个“0”不变)。
但是请注意,虽然行内的退格符通常有效,但行首的退格符可能会也可能不会将光标/写入位置移回前一行。对于大多数实际用途,您只能在一行内移动。