我想创建一个小函数,它应该在控制台中以百分比显示当前状态.该函数应仅显示行中的当前值.所以我必须删除最后一个输出.那可能吗?最好的情况是一些ANSI C的东西,该程序应该适用于Linux和Windows.
我找到了一些类似的转义序列"\033[J",但它不起作用.
编辑
好吧,我尝试过:
void PrintProcessBar(int i, int n) {
float ratio = i / (float)n;
printf("%.3d\b\b", (int)(ratio * 100));
fflush(stdout);
}
Run Code Online (Sandbox Code Playgroud)
但它只打印了很多零...出了什么问题?如果我用三个,\b我什么也得不到.
解
float ratio = (i / (float)n) * 100;
printf("\b\b\b\b");
fflush(stdout);
printf("%.3d%c", (int)ratio, 37);
fflush(stdout);
Run Code Online (Sandbox Code Playgroud)
i =当前位置.n =最大运行.
我使用4 \b因为,在第一次调用函数时它将删除4个空格.
格尔茨.
MBy*_*ByD 13
\b是退格的转义序列.你可以用空格来删除一行.
例如:
printf("98%");
fflush(stdout);
// sleep some time
printf("\b\b\b99%");
fflush(stdout);
Run Code Online (Sandbox Code Playgroud)
这应该打印98%,然后用99%替换它.
您寻找的\r是Carriage Return.使滑架返回到行的开头.不要使用,\n因为它会下降一行.
因为\ r \n不删除文本而只是允许您覆盖,所以必须确保打印足够的文本(如果需要空格)以清除行.