小工具知识网

当前位置: 首页 > 行业知识 > 【Linux】第一个小程序--进度条

行业知识

【Linux】第一个小程序--进度条

2026-11-12 06:58:52 来源:互联网转载

这���博客要综合利用以前的知识,来实现一个进度条程序~

目录

换行&回车

缓冲区

实现简单的倒计时

实现进度条

version1

version2


 

在开始写这个小程序之前,我们先学习一些预备知识:

换行&回车

缓冲区

 在我们运行这个程序时,并没有直接打印出“hello bit,hello world...”,而是当程序运行结束后才显示出来,但是这并不代表这句打印没有执行,而是没有显示出来而已。

那么,在我sleep期间,字符串在哪里?

答案就是被保存在叫做缓冲区的地方,就是一块内存空间,当程序结束时,一般会自动刷新缓冲区到字符设备(显示器),另外,如果程序遇到‘\n’的时候,也会刷新缓冲区。如果想要强制刷新,可以使用fflush命令。

那么,为什么要有缓冲区呢,为什么按行刷新?为了提高效率,方便人类阅读,人类读信息都是按行读的,是一种尊重用户的表现。

 实现简单的倒计时

在实现倒计时中,我们想要达到的效果是依次显示数字,并且下一个覆盖前一个数字,创建test.c文件:

  1 #include   2 #include   3   4 int main()  5 {  6   int cnt=10;  7   while(cnt >=0)  8   {  9     printf("倒计时:%2d\r",cnt);                 10     fflush(stdout); 11     cnt--; 12     sleep(1); 13   } 14   printf("\n"); 15  16   return 0 ; 17 }

我们实现的效果是10,9,...1,0的倒计时效果,其中,

printf("倒计时:%2d\r",cnt);

这句代码中\r是回车,在一次打印完成后,光标回到最前面,继续打印下一个值,覆盖掉上一次的值,用%2d的格式打印的原因是,每次打印两个字符,以防某个字符一直在屏幕上显示。使用fflush(stdout)强制刷新到显示器上。

此外,我们还写了makefile自动化构建工具:

 mycode:test.c  2   gcc -o $@ $^  3 .PHONY:clean  4 clean:  5   rm -f mycode

至此完成了简单的倒计时效果。

实现进度条

version1

在实现进度条中,我们要创建三个文件:Processbar.h,Processbar.c,Main.c,Main.c负责将Processbar.h中的方法进行调用,最终想达到的效果如下图:

在Processbar.h中,我们定义了Process函数声明;

#pragma once                                   #include extern void Process();

在Processbar.c中实现了Process:

 #include "Processbar.h" #include  #include  #define Length 101 #define Style '#' const char * label = "|/-\"; // version1  void Process()  {     char bar[Length];     memset(bar,'',sizeof(bar));     int cnt = 0;     int len =strlen(label);     while(cnt 

上一篇:mySQL中exists关键字的详细用法

下一篇:揭秘CBD真相,洞悉商务中心区的核心魅力!