当前位置: 首页 > news >正文

个人网站建设联系电话成都做公众号推广的公司

个人网站建设联系电话,成都做公众号推广的公司,好的网站建设技术,住房和城乡建设厅门户网站[Linux]制作进度条小程序 文章目录 [Linux]制作进度条小程序C语言中的\n和\r字符缓冲区的刷新策略进行进度条代码编写 C语言中的\n和\r字符 C语言中字符分为两种: 可显字符控制字符 其中可显字符就是字符a这类的字符,控制字符就是\n这种控制字符。 对于我们制作…

[Linux]制作进度条小程序

文章目录

  • [Linux]制作进度条小程序
    • C语言中的\n和\r字符
    • 缓冲区的刷新策略
    • 进行进度条代码编写

C语言中的\n和\r字符

C语言中字符分为两种:

  • 可显字符
  • 控制字符

其中可显字符就是字符a这类的字符,控制字符就是\n这种控制字符。

对于我们制作进度条,我们只需要关注两个控制字符:

  • \r – 进行回车操作
  • \n – 进行换行加回车操作

说明: \n本身是换行字符,但是C语言本身将其解析成了换行加回车。

为了更好地体会字符\r和\n的作用,我们需要做一些测试,为了方便进行编译,创建makefile文件,文件内容如下:

mytest:test.cgcc -o mytest test.c
.PHONY:clean
clean:rm -f mytest

首先执行如下代码:

#include <stdio.h>
#include <unistd.h>
int main()
{printf("hello world");sleep(3);fflush(stdout);return 0;
}

说明:

  • fflush(stdout)是将标准输出缓冲区刷新,便于观察现象。
  • sleep为Linux系统的休眠函数。

执行结果如下:

image-20230730125207629

在打印完hello world后,程序休眠,"光标"在同一行的下一个位置

image-20230730125310098

休眠结束后,将会接着从光标位置开始打印,因此打印的[qxm@aliyun-centos review]$命令行提示符,紧跟在hello world其后。

再执行如下代码:

#include <stdio.h>
#include <unistd.h>
int main()
{printf("hello world\n"); sleep(3);return 0;
}

执行结果如下:

image-20230730125541374

由于\n被C语言解析成换行加回车,在打印完hello world后程序休眠,"光标"会到下一行的开始的位置。

image-20230730123307921

休眠结束后,将会接着从光标位置开始打印,因此[qxm@aliyun-centos review]$命令行提示符是在下一行的行首打印。

最后执行如下代码:

#include <stdio.h>
#include <unistd.h>
int main()
{printf("hello world\n"); sleep(3);return 0;
}

说明:

  • fflush(stdout)是将标准输出缓冲区刷新,便于观察现象。
  • sleep为Linux系统的休眠函数。

执行结果如下:

image-20230730130940986

由于\r为回车,在打印完hello world后程序休眠,"光标"会回到行首。

image-20230730123307921

休眠结束后,将会接着从光标位置开始打印,因此[qxm@aliyun-centos review]$命令行提示符将原有的hello world覆盖了。

image-20230730131108150

缓冲区的刷新策略

Linux系统下,C语言会将要打印的字符先存放在缓冲区中,只有将缓冲区内的字符刷新到屏幕上,才能在屏幕上看到,缓冲区刷新的情况如下:

  • 遇到\n会将\n前的所有字符刷新到屏幕上。
  • 程序结束时自动刷新缓冲区。

对于缓冲区测试,我们执行如下代码:

#include <stdio.h>
#include <unistd.h>
int main()
{printf("hello world\r");sleep(3);return 0;
}

执行结果如下:

image-20230730132019107

因为缓冲区没有刷新,因此程序休眠时,没有任何打印。

image-20230730133131040

程序执行结束后,缓冲区被自动刷新,hello world被打印出来,但是由于\r回车将"光标"退回到行首,因此命令提示符的打印将前面的打印覆盖了。

再执行如下代码:

#include <stdio.h>
#include <unistd.h>
int main()
{printf("hello world\n");sleep(3);return 0;
}

执行结果如下:

image-20230730132354920

由于遇到了\n缓冲区内的数据在休眠前刷新了。

image-20230730132526954

程序休眠结束后,命令行提示符从光标所在位置开始打印。

进行进度条代码编写

创建以下文件构成代码结构:

  • myproc.h – 保存进度条代码的声明
  • myproc.c – 保存进度条代码的实现
  • main.c – 调用进度条代码

myproc.h文件中的核心结构如下:

#pragma once 
#include <stdio.h>
extern void process();

myproc.c文件中的核心结构如下:

#include "myproc.h"
void process()
{//...
}

main.c文件中的核心结构如下:

#include "myproc.h" 
int main()
{process();return 0;
}

同时创建makefile文件,makefile文件内部写入如下内容:

myproc:myproc.c main.cgcc -o myproc myproc.c main.c
.PHONY:clean
clean:rm -f myproc

建立好代码结构后,编写如下代码充当图形化进度条:

#include "myproc.h"
#include <string.h>
#include <unistd.h>#define STYLE '='
#define ARROW '>'
#define SIZE 101void process()
{char buf[SIZE];memset(buf, 0 , SIZE);int i = 0;while(i <= 100){printf("[%-100s]\r", buf);fflush(stdout);buf[i++] = STYLE;if(i != 100 )buf[i] = ARROW;usleep(100000);}printf("\n");
}

首先创建一个字符串用于保存要打印的图形化进度条buf,对其进行初始化,然后在打印时进行左对齐打印buf并且按100个字符长度打印,

每次打印完回车覆盖上一次从打印,并且刷新缓冲区使得打印显示到屏幕上,使用休眠函数来充当进度的加载。

打印的效果如下:

111

除了图形化进度条还要设置数字化进度显示,因此需要对打印进行修改,如下:

printf("[%-100s][%d%%]\r", buf, i);

增加打印进度百分比作为数据化进度显示,%%将会转义成一个%打印在屏幕上。

打印的效果如下:

222

最后增添一个旋转光标表示进度条正在不断执行,因此需要对打印再进行修改,得到最终的代码如下:

#include "myproc.h"
#include <string.h>
#include <unistd.h>#define STYLE '='
#define ARROW '>'
#define SIZE 101void process()
{const char* cursor = "|/-\\";char buf[SIZE];memset(buf, 0 , SIZE);int i = 0;while(i <= 100){printf("[%-100s][%d%%][%c]\r", buf, i, cursor[i%4]);fflush(stdout);buf[i++] = STYLE;if(i != 100 )buf[i] = ARROW;usleep(100000);}printf("\n");
}

添加了cursor字符串保存旋转光标的样式,其中\\会转义成一个\,因为旋转光标中是将4个字符循环打印因此将样式字符串模4输出。

最终进度条的演示结果如下:

333

http://www.yayakq.cn/news/255132/

相关文章:

  • 济宁万达网站建设网课网站
  • wordpress建站产品导入不同目录商丘电子商务网站建设
  • 微博营销案例有哪些wordpress seo 标题
  • 营销型网站开发推广重庆企业网站推广方案
  • 四川建网站世界建筑网站
  • 音乐网站的建设站长工具的使用seo综合查询排名
  • 电子商务网站推广的界定如何做网站毕业设计
  • 可以做旅行行程的网站国外效果做的好的网站
  • 做网站的程序员进什么公司好男生学什么技术最挣钱
  • 扬中网站推广哪家好营销和销售的区别在哪里
  • wap网站制作没有网站可以做淘宝客吗
  • 做ppt的模板的网站有哪些内容怎样做某个网站有更新的提醒
  • 西安企业网站怎么建立wordpress文章自动摘要
  • 网站开发的私活网站短片怎么做
  • 建设通网站登录不进去asp网站怎么做301定向
  • 手游超变传奇网站发布网资源网站优化排名网站
  • 如何做一名优秀的网站管理者网络营销课程总结
  • 深圳做兼职的网站wordpress修改图片
  • 网站建设的公司开发ps做的网站模板
  • 廊坊制作网站公司做婚恋网站赚钱吗
  • ae有么有做gif的网站学网站软件设计
  • 象山县城乡建设局网站品牌展示榜ui做的好的网站
  • 仙居网站建设大连市网站推广公司
  • 图片比较多的网站怎么做东莞软件
  • 影视网站搭建哪个系统好北京网站如何制作
  • 网站布局优化策略内蒙古建设工程造价信息网官网中项网
  • 网站建设行业新闻动态文章自定义wordpress
  • app和网站趋势临沂网站建设费用
  • 龙岩网页制作seo关键词推广价格
  • 网站建设业务的销售人员培训文档郑州二七区