C删除printf输出

时间:2012-02-07 10:13:36

标签: c console printf

我想创建一个小函数,它应该在控制台中以百分比显示当前状态。该函数应仅显示行中的当前值。 所以我必须删除最后一个输出。那可能吗?最好的情况是一些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个空格。

格尔茨。

2 个答案:

答案 0 :(得分:13)

\b是退格的转义序列。你可以用空格来删除一行。

例如:

printf("98%");
fflush(stdout);
// sleep some time
printf("\b\b\b99%");
fflush(stdout);

这应打印98%,然后将其替换为99%。

答案 1 :(得分:6)

你要找的是\r它是回程。使滑架返回到行的开头。 不要使用\n,因为它会向下移动一行。

因为\ r \ n不会删除文字而只是允许你覆盖,所以你必须确保打印足够的文本(如果需要空格)以清除你的行。