如何让终端刷新而不在C中打印新内容
我想制作一个更加动态的界面,而不是每次都打印出一个全新的页面,但不知道如何实现它。例如,如果我们有一个从0%到100%的下载条,我想直接在终端上更改数字,而不是打印出100行1%,2%,3%。我该怎么处理它呢 您可以打印一个如何让终端刷新而不在C中打印新内容,c,linux,terminal,interaction,C,Linux,Terminal,Interaction,我想制作一个更加动态的界面,而不是每次都打印出一个全新的页面,但不知道如何实现它。例如,如果我们有一个从0%到100%的下载条,我想直接在终端上更改数字,而不是打印出100行1%,2%,3%。我该怎么处理它呢 您可以打印一个\r字符,该字符称为“回车符”,在大多数情况下应将光标返回到行的开头,以便您可以打印已经存在的文本。我之所以说应该,是因为它不能保证,这取决于程序运行的shell。如果你想做更多异国情调的事情,你应该研究。你应该使用一个跨平台的终端访问库,例如。如果你想把它放在一行上,更简单
\r
字符,该字符称为“回车符”,在大多数情况下应将光标返回到行的开头,以便您可以打印已经存在的文本。我之所以说应该,是因为它不能保证,这取决于程序运行的shell。如果你想做更多异国情调的事情,你应该研究。你应该使用一个跨平台的终端访问库,例如。如果你想把它放在一行上,更简单的选择是使用\r
。
打印\r
将光标移动到行首,使您能够打印旧字符
一个解决方案看起来像
for (i = 0; i < 100; ++i)
{
printf("\r%3i%%", i);
fflush(stdout);
/* ... */
}
(i=0;i<100;++i)的
{
printf(“\r%3i%%”,i);
fflush(stdout);
/* ... */
}
如果需要对终端进行更高级的控制,可以使用。最简单的解决方案是输出回车符
\r
将光标位置翻转到行的开头,然后用新百分比的新行覆盖上一个输出行。主要的替代方案包括ncurses
。您也可以尝试退格。如果您这样做,请提供一个选项来禁用它。如果我将程序的输出重定向到一个文件,我不希望在其中包含一堆控制字符。%3i
打印带有足够空格的数字,以使输出始终使用3个字符<代码>%%在其后面打印一个百分号。参见printf