简易的进度条

一个简易的进度条

\r与\n

回车 \r 本义是光标重新回到本行开头

换行 \n 本义是光标往下一行(不一定到下一行行首)

我们通常用的Enter是两个操作加起来实现的。

fflush(stdout)

首先,当我们使用输出函数 printf 或 cout 打印内容时,输出永远不会直接写入“屏幕”。而是被发送到 stdout

stdout 像一个缓冲区,stdout默认是行缓冲,也就是它遇到‘\n’,才向外输出内容,如果你想stdout也实时输出内容,那就在输出语句后加上fflush(stdout),这样就能达到实时输出的效果。

通俗的讲,如果收到了一个换行符,stdout就会把这个缓冲区的内容打印到屏幕上,并清空。而 fflush 的作用就是直接把缓冲区的内容打印到屏幕上,并清空缓冲区。不必等换行符。

sleep()与usleep()

1秒 (s)= 1000毫秒(ms)
1毫秒 = 1000微秒(us)


Linux下(使用的gcc的库),sleep ()函数是以秒为单位的,sleep (1)就是休眠1秒,这对这个简易的进度条来讲确实有点慢了。

我们使用usleep()函数,其**以微秒(us)为单位,**故更合适。

进度条的实现

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<unistd.h>
  4 
  5 #define STYLE '*'
  6 #define SIZE 101
  7 void process()
  8 {
  9   const char* sch="|\\-//";//  【//】表示输出/,【\\】表示输出\
 10   char bar[SIZE];
 11   memset(bar,'\0',sizeof(bar));//先将整个进度条都初始化为'\0'
 12 
 13 
 14   int cur=0;
 15   while(cur<=100)
 16   {//以%-100s输出表示从左边输出并且留够足够大的空间,%%表示输出一个%用来做百分比标识,变化标识符只有0123故将其模4即可
 17     printf("bar[%-100s][%d%%] [%c]\r",bar,cur,sch[cur%4]);
 18     fflush(stdout);
 19     bar[cur++]=STYLE;//进度条覆盖标识
 20     usleep(200000);
 21   }
 22   printf("\n");
 23 }
 24 int main()                                                                                  
 25 {
 26     process();
 27     return 0;
 28 }

效果:

当然这只是一个非常简陋的进度条,只是借此练习一下vim的一些用法以及理解make/makefile的应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值