Linux小程序---进度条

文章作者:看风起花落
.
唯有热爱可抵岁月漫长,与诸君共勉!!!


思路

要完成进度条程序,首先我们来观察这两段代码的区别

int main()    
{    
  printf("hello world\n");    
  sleep(2);                                                                      
  return 0;    
}    
int main()    
{    
  printf("hello world");    
  sleep(2);                                                                      
  return 0;    
}    

这两段代码只是带了\n和没有带\n的区别,

我们可以观察到的现象是

第一段代码运行的结果是屏幕打印hello world,然后等待2秒钟,程序结束。

第二段代码运行的结果是等2秒钟之后,程序结束之时,hello world才显示在屏幕上。

为什么会这样?难道第二段代码是先执行sleep(2)吗?

显然不是,C程序没有改变代码结构,一般都是顺序执行。

之所以出现这种现象是因为程序打印信息并不是直接打印到屏幕上,而是将要打印的字符串拷贝到

缓冲区当中,只有缓冲区刷新时,才会显示到屏幕,而显示器刷新的策略就是遇到\n就刷新。

所以我们可以用ffulsh(stdout)这个函数控制立即刷新,即可达到\n的效果

我们在认识到,\r是只回车并不换行的意思

有了这两点知识储备就可以进行进度条代码的编写了

小提示:我的运行环境是Linux,所以头文件有一些差别。


进度条代码

#include     
#include     
#include     
    
#define N 100    
    
int main()    
{    
  char bar[N+1];//进度条的长度设为100,+1的目的是存放\0    
  memset(bar,'\0',sizeof(bar));//初始化    
  const char tip[] = "|/-\\";//小提示符号,进度条运行时它就转动,表示进度条还没结束    
  int i = 0;    
  while(i<=100)    
  {    
    printf("[%-100s][%3d][%c]\r",bar,i,tip[i%4]);    
    fflush(stdout);    
    bar[i++] = '*';//设置进度条符号    
    //sleep(1);    
    usleep(100000);//usleep是微秒级别的延时                                                                                                                            
  }    
  printf("\n");    
  return 0;    
}

你可能感兴趣的:(随记,Linux,c++,开发语言)