进度条程序详解(Linux)

话不多说,先贴源码,后面是讲解

#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main() {
  char dir[101] = {0};
  memset(dir, 0, 101);
  char* str = "|\\-/";
  int i = 0;
  while (i < 100) {
    dir[i] = '#';
    i++;
    printf("[%-100s][%3d%%][%c]\r", dir, i, str[i % 4]);
    fflush(stdout);
    

    usleep(10000);
  }
  printf("\n");
  return 0;
}

这是可以直接复制粘贴的代码,以下是讲解

首先,我们要普及两个概念:回车和缓冲两个概念。

回车:我们要明白的是,我们平时按得enter键(),他不是单纯回车。

现在我们看一下回车和换行真正的概念

        换行:

直接换到下一行,并且上一行不如写了一半,他会在下一行的另一半继续写。

回车:是不管你在这一行写了多少,都会重新在这一行开始写。

所以咱们一般所谓的enter(回车键),指的其实是回车加换行,所以你可以叫他回车键,也可以叫他换行键。

        同理,‘\n’其实也不是单纯的换行.

第二个概念:缓冲的概念.举个例子:

执行这个程序,我们发现,hello word 打印出来以后过了五秒,才出现了下一个命令行提示符.

修改一下,把'\n'去掉,我们会发现,他是五秒以后才打印hello word 这就是缓冲区的作用.

其实,我们写的代码上传到显示屏上是般一行一行上传的,第一次,遇到了'\n',所以瞬间就会显示hello word,而第二次,因为没有了'\n',所以没有上传,所以他虽然已经执行了,但是是在缓冲区存着,所以没有显示在显示屏上,而sleep函数也相当于和他在同一行,所以也执行了,等到这一行结束了,其实也就是程序都跑完了,他才显示出来了,而你要是想让他直接显示在显示屏上,就需要一个函数,也就是fflush(stdout)函数,可以强制刷新,让他显示出来.

        代码的其他部分我相信都不难看懂,最后,复习一下前两天make/Makefile(),把这个文件分为三部分,touch四个文件,dir.c,dir.h,main.c,Makefile

dir.c

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "dir.h"

int dir() {
  char dir[101] = {0};
  memset(dir, 0, 101);
  char* str = "|\\-/";
  int i = 0;
  while (i < 100) {
    dir[i] = '#';
    i++;
    printf("[%-100s][%3d%%][%c]\r", dir, i, str[i % 4]);
    fflush(stdout);
    

    usleep(10000);
  }
  printf("\n");
  return 0;
}

dir.h,main.c,Makefile

#pragma once

int dir();
#include "dir.h"

int main() {
  dir();
  return 0;
}

 

dir:dir.o main.o
	gcc -o $@ $^
%.o:%.c
	gcc -c $<

.PHONY:clean
clean:
	rm -f *.o dir

ok,喜欢的就点个赞吧 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值