C语言实现进度条Demo

为了巩固所学的C语言基础知识,晚上自己做了做一个进度条的小Demo,实现在同一行覆盖刷新输出进度信息。

1.首先看一看运行效果

 

2.附上代码段

int main()
{
    int i, num = 1;
    const char* pic = "|/-\\"; //简单动画特效

    printf("Loading state:\n");

    while(1)
    {   
        if(101 == num)    //当num自增到101时,进度条已满。显示Loading成功信息,并跳出死循环。
        {   
            printf("\nLoading success!\n");
            break;
        }   

        printf("[");
        for(i = 0; i < num/10; i++)    //当进度前进10个点时,刷新一次进度条。
            printf("*");    //以'*'充当进度条。
        printf("]");

        printf("%d%%...%c\r", num++, pic[num%4]);   //'\r'为回车符。
        fflush(stdout);    //清空标准输出缓冲区中多余的数据。
        usleep(300000);    //这里通过修改睡眠时间来控制进度条更新速度。
    }   

    return 0;
}

3.说明

const char* pic = "|/-\\";  //动画特效  因为‘\’为转义字符,所以双引号内实际为“|/-\”。
                                      //上面写成const char pic[] = "|/-\\";也可以。

printf("%d%%...%c\r", num++, pic[num%4]);  //"%d%%"打印时实际为“num%”形式,                                                                                                                                              //因为格式控制符"%%"打印时实际输出一 个“%”。

                                                                        //pic[num%4]实际上是循环取常量字符串的每一个元素,

                                                                        //因为是模运算,这里下标会限定在0~3之间,很好的限定了指针pic的活动范围。

fflush(stdout);  //清空输出缓冲区,并把缓冲区内容输出。

usleep(200000);  //注意这里是微秒,1s=1000000us,故这里设定0.2s更新一次进度。

4.结束语

第一次写博客,脑海里想的跟自己写出来的还是有差别的哈 ^_^

有很多地方本来还可以再深入表述一下的,奈何文字组织功底太差了,望海涵。

 

 

 

你可能感兴趣的:(C)