Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让终端刷新而不在C中打印新内容_C_Linux_Terminal_Interaction - Fatal编程技术网

如何让终端刷新而不在C中打印新内容

如何让终端刷新而不在C中打印新内容,c,linux,terminal,interaction,C,Linux,Terminal,Interaction,我想制作一个更加动态的界面,而不是每次都打印出一个全新的页面,但不知道如何实现它。例如,如果我们有一个从0%到100%的下载条,我想直接在终端上更改数字,而不是打印出100行1%,2%,3%。我该怎么处理它呢 您可以打印一个\r字符,该字符称为“回车符”,在大多数情况下应将光标返回到行的开头,以便您可以打印已经存在的文本。我之所以说应该,是因为它不能保证,这取决于程序运行的shell。如果你想做更多异国情调的事情,你应该研究。你应该使用一个跨平台的终端访问库,例如。如果你想把它放在一行上,更简单

我想制作一个更加动态的界面,而不是每次都打印出一个全新的页面,但不知道如何实现它。例如,如果我们有一个从0%到100%的下载条,我想直接在终端上更改数字,而不是打印出100行1%,2%,3%。我该怎么处理它呢

您可以打印一个
\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