0


C语言实现进度条小程序

目录

写在文前

今天我们实现一个进度条的小玩意儿,很简单,我们先看看成果

进度条

缓冲区

在学习计算机时,你在很多地方有可能看到到缓冲区的字样,那什么是缓冲区啊?,我们先看一下现象

我是在Linux环境下演示,window环境下演示可能会没有效果。

#include<stdio.h>intmain(){printf("你好,缓冲区");sleep(3);//在Linux环境下sleep的单位 秒                                                                                                                                                        return0;}

缓冲区

你会发现当我们执行程序时,会有大概几秒的延迟,可我们不是先执行的printf函数吗,后面才是sleep,实际上这也是事实,只不过当我执行printf后,我们想要输出的内容被放到一个缓冲区里面了,后面才会被打印出来,下面我将仔细的说一下什么缓冲区

本质上 缓冲区就是一块内存,我们将想要输出的数据放到缓冲区中,当我们刷新缓冲区的时候会把他打印出来,我们可以把数据当成一个水池,缓冲区看作打水的的木桶,当水桶满了的时候或者我们就是想要一半的水,就把水倒出来。

什么情况下缓冲区会刷新

  • 全缓冲 缓冲区满了,会刷新
  • 行缓冲 我们使用换行符,缓冲区也会刷新
  • 函数缓冲 我们使用某个函数强制刷新
  • 程序退出,自动刷新

下面我们一一演示

全缓冲

我们演示一下,大家就懂了

#include<stdio.h>intmain(){while(1){printf("hello world");sleep(3);}return0;}

Inked缓冲区满了

由于时间有些长,我们就不等了,结果是当缓冲区满了后,屏幕上会出现一屏幕的 hello world

行缓冲

我们这里的换行是指的 \n,它可以是缓冲区刷新

#include<stdio.h>intmain(){while(1){printf("hello world\n");sleep(3);}return0;}

换行

函数缓冲

在C语言中提供了一个函数,它可以强制刷新缓冲区,这就是 fflush(),它是stdio.h中的库函数,在一个C程序中,编译器会默认打开 3 个标准输入输出流,分别是下面的,这一点知道就可以了

  1. stdin
  2. stdout
  3. stderr
#include<stdio.h>intmain(){while(1){printf("hello world");fflush(stdout);sleep(3);}return0;}

刷新

\n 和 \r

有很多人都搞不懂这两个有什么区别,我们今天重点说一下

  • \n 叫做 换行
  • \r 叫做 回车

我们举一个写文章的例子,当我们在“我叫张三,外号法外狂徒。”这句话再开一行时,看看他们之间的区别

image-20220305183128541

有人可能会感到疑惑,这和我们用的不对啊,我们之前使用下面的代码时,都是再下一行的开头直接打印,实际上这是C语言的编译器默认将换行回车这两个浓缩到 \n了

printf("hello world\n");printf("hello world\n");

演示效果 \r

我们先演示一下效果

#include"ProcBar.h"intmain(){int count =10;while(count--){printf("%d\r",count);sleep(1);}printf("hello word\n");return0;}

效果gif

注意看,我们没有打印出9,8,7,6,5这样的数据,原因是缓冲区的因素,我们使用函数刷新一下缓冲区看看效果

#include"ProcBar.h"intmain(){int count =10;while(count--){printf("%d\r",count);fflush(stdout);sleep(1);}printf("hello word\n");return0;}

刷新缓冲区

进度条

有了上面的知识点,我们就可以写出自己的进度条了,由于多文件情况下阅读的体验不太好,我把代码写在一个文件中

  • usleep() 和 sleep()的作用一样,不过它的单位是 毫秒
  • memset() 是 string.h库的一个函数,它可以把数组内部都初始化指定的 数据
  • %-100s 设置100的字段,**-** 表示 左对齐
  • %d%% 是为了了打印 百分比 %是转换说明,所以用 两个%代替一个% %% -> % 详细的请👉转换说明
#ifndef __INCLUDE_H__  //防止头文件被重复引用#define __INCLUDE_H__#include<stdio.h>#include<string.h>#endifvoidproBar(){constchar* p ="|/-\\";int i =0;char arr[101]={0};memset(arr,'\0',sizeof(arr));while(i <=100){printf("[%-100s][%d%%][%c]\r", arr, i, p[i %4]);fflush(stdout);
        arr[i++]='#';usleep(80000);}printf("\n");}intmain(){proBar();return0;}

这样,你的进度条就完成了,我们也可以给进度条添加颜色,C语言是支持的,不过这就要你自己去处理了


本文转载自: https://blog.csdn.net/m0_61334618/article/details/123301197
版权归原作者 玄鸟轩墨 所有, 如有侵权,请联系我们删除。

“C语言实现进度条小程序”的评论:

还没有评论