我想创建一个小函数,它应该在控制台中以百分比显示当前状态。该函数应仅显示行中的当前值。 所以我必须删除最后一个输出。那可能吗?最好的情况是一些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);
}
但它只打印了很多零...出了什么问题?如果我使用三个\b
,我什么也得不到。
解决方案
float ratio = (i / (float)n) * 100;
printf("\b\b\b\b");
fflush(stdout);
printf("%.3d%c", (int)ratio, 37);
fflush(stdout);
i =当前位置。 n =最大值。
我使用4 \b
,因为在第一次调用函数时它将删除4个空格。
格尔茨。
答案 0 :(得分:13)
\b
是退格的转义序列。你可以用空格来删除一行。
例如:
printf("98%");
fflush(stdout);
// sleep some time
printf("\b\b\b99%");
fflush(stdout);
这应打印98%,然后将其替换为99%。
答案 1 :(得分:6)
你要找的是\r
它是回程。使滑架返回到行的开头。 不要使用\n
,因为它会向下移动一行。
因为\ r \ n不会删除文字而只是允许你覆盖,所以你必须确保打印足够的文本(如果需要空格)以清除你的行。