每次使用wget下载内容时,会发现进度条都是当行一直更新,而在c中打印都是printf,这个似乎没有此功能;今天查了下,发现printf \n 是另起一行,\r是回到本行的开头,如果继续输入的话,则覆盖之前的内容,如下是个DEMO:

include < stdio.h>
include < stdlib.h>
include < unistd.h>
  
//类似wget的进度条的实现,实际就是转移符\r的使用,\r的作用是返回至行首而不换行
int main(int argc, char *argv[])
{
    unsigned len = 60;
    char *bar = (char *)malloc(sizeof(char) * (len + 1));
    for (int i = 0; i < len + 1; ++i)
    {
        bar[i] = '#';
    }
    for (int i = 0; i < len; ++i)
    {
        printf("progress:[%s]%d%%\r", bar+len-i, i+1);
        fflush(stdout);//一定要fflush,否则不会会因为缓冲无法定时输出。
        usleep(100000);
        //sleep(1);
    }
    printf("\n");
    return 0;
}