2

我想更新我的 C 控制台应用程序中的屏幕。我想做一个控制台进度条。我怎样才能?看这个:

正在下载...
|==== | 34%
至:
正在下载...
|===== | 50%
这些必须在同一行,我必须更新该行。

4

4 回答 4

2

看看这个例子:http ://www.rosshemsley.co.uk/2011/02/creating-a-progress-bar-in-c-or-any-other-console-app/

重点是:

我们必须首先编写正确的转义序列,以便终端知道将下一个符号作为命令执行。在 C 语言中,这个转义码是“\033[”。然后我们可以使用任何我们喜欢的命令。在这个例子中,我们使用“\033[F”上升一行,然后使用“\033[J”清除一行. 这将删除加载条曾经所在的行,并定位光标,以便我们可以再次重写同一行。

// Process has done i out of n rounds,
// and we want a bar of width w and resolution r.
static inline void loadBar(int x, int n, int r, int w)
{
    // Only update r times.
    if ( x % (n/r) != 0 ) return;

    // Calculuate the ratio of complete-to-incomplete.
    float ratio = x/(float)n;
    int   c     = ratio * w;

    // Show the percentage complete.
    printf("%3d%% [", (int)(ratio*100) );

    // Show the load bar.
    for (int x=0; x<c; x++)
       printf("=");

    for (int x=c; x<w; x++)
       printf(" ");

    // ANSI Control codes to go back to the
    // previous line and clear it.
    printf("]\n\033[F\033[J");
}
于 2013-06-24T09:44:02.060 回答
0

您可以简单地使用\b字符来清除您的行。printf("\b\b\b\b\b\b%5d",value); fflush(stdout). 这是一种非常简单的方法。当然,如果你需要做更复杂的事情,编辑多行,坐标管理,你应该考虑使用curses。

于 2013-06-24T14:07:54.493 回答
0

在许多系统上 \r 可用于覆盖该行..您只需要确保以某种方式刷新该行。

静态 const char 等于 [] = "=====....====="; // 总共 50 个 ='s

浮动百分比;// 百分比...假设你需要浮动
诠释 p; // 整数百分比

对于(百分比 = 0.0;百分比 < 100.0;百分比++)
{
    p = 百分比 + 0.5;
    fprintf(stdout, "\r|%.*s | %d", p/2,equals, p);
    fflush(标准输出);// 确保行写入,即使没有 \n
}

p = 百分比 + 0.5;
printf("\r|%.*s | %d\n", p/2,equals, p); // 最后一行带有 \n

现在是读者提防未编译和未测试代码的时候了。

于 2013-06-24T10:45:31.797 回答
-1
#include <stdlib.h>
#include<stdio.h>
int main(void)
{
    int i = 0;
    for(i = 0; i <= 100; i+= 10)
    {
        int j;
        for(j = 0; j <= i/10; j++)
            printf("=");

        printf("%d\n",i);
        sleep(1);
        system("clear");
    }
}
于 2013-06-24T09:47:56.920 回答