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

有没有做长图的网站微信管理系统

有没有做长图的网站,微信管理系统,名词解释响应式网页设计,专题网站建站🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

🕺作者: 主页

我的专栏
C语言从0到1
探秘C++
数据结构从0到1
探秘Linux
菜鸟刷题集

😘欢迎关注:👍点赞🙌收藏✍️留言

🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢阅读!!!

前言

前面几章我们讲述了Linux指令、权限管理、编辑器、编译器、软件包管理器、自动化管理工具,也写了简单的”Hello World“程序,但是没有实现过复杂一点的程序,光说不练假把式,今天就带大家来做一个小项目–进度条。

搭建框架

在写代码之前,我们先把文件先建好。

vim main.c
vim process.c
vim process.h
vim makefile

书写代码

在写代码要先讲一个知识点。

1.回车换行
在我们日常使用回车键时,是否注意到,当我们按下回车键,也就是\n,光标就会换到第二行的开始,其实这里面有两个动作,换行和把光标设置到行开始,在C语言中可用\r来把光标换到开始位置
我们来借此写个小demo:倒计时

void download()
{int cnt=10;while(cnt!=0){printf("%-2d\r",cnt);fflush(stdout);cnt--;sleep(1);}printf("\n");
}

效果如下:
请添加图片描述

第一版

我们最终要实现这个效果:
请添加图片描述
我们前面讲了\r可以把光标移到行始,所以在我们输出缓存字符的时候,每一次都移到一开始的位置,随着缓存字符的增多,来实现进度条的效果。
代码如下:
process.c

#include"process.h"                                                                                                            
const char *lable="|/-\\";//通过循环实现一个转动的效果                                                                                                     
char bar[NUM];                                                                                                                 void download(int speed)                                                                                                       
{                                                                                                                              char bar[NUM];//使用数组来存储”缓存字符“                                                                                                             memset(bar,'\0',sizeof(bar));//初始化                                                                                              int len =strlen(lable);                                                                                                    int cnt=0;                                                                                                                 while(cnt<=TOP)//设置终止条件                                                                                                            {                                                                                                                          printf("[%-100s][%d%%][%c]\r", bar, cnt, lable[cnt%len]);//%-100s:预留100个空间左对齐//%%:输出%,也可以使用\%//\r:把光标移到开始位置                                                               fflush(stdout);//清空缓存区                                                                                                         bar[cnt++]=BODY;//将cnt所在位置设置为”BODY"                                                                                                        if(cnt<100)bar[cnt]=RIGHT;//设置>                                                                                              usleep(speed);//控制进度条的速度,单位是微秒                                                                                                      }                                                                                                                          printf("\n");                                                                                                              
}               

main.c

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

process.h

#pragma once
#include<stdio.h>
#include <unistd.h>
#include<string.h>#define NUM 102
#define TOP 100
#define BODY '='
#define RIGHT '>'extern void download(int speed);

makefile

process:process.c main.c  gcc -o $@ $^                                                                                                               .PHONY:clean  clean:   rm -f process   

通过注释,应该可以清楚明白代码的实现原理,但是进度条该怎么用呢?这是一个问题,下面我们来模拟一下使用场景,只需要再修改一下代码即可。

第二版

参考代码注释理解

main.c

#include "processBar.h"typedef void (*callback_t)(int); // 函数指针类型// 模拟一种安装或者下载
void downLoad(callback_t cb)
{int total = 1000; // 1000MBint curr = 0;     // 0MBwhile(curr <= total){// 模拟进行着某种下载的任务, 我usleep(50000);  // 模拟下载花费的时间int rate = curr*100/total; // 更新进度cb(rate); // 通过回调,展示进度curr += 10;     // 循环下载了一部分}printf("\n");
}int main()
{printf("donwnload 1: \n");downLoad(processbar);initbar();printf("donwnload 2: \n");downLoad(processbar);initbar();printf("donwnload 3: \n");downLoad(processbar);initbar();printf("donwnload 4: \n");downLoad(processbar);initbar();return 0;
}

processBar.h

#pragma once#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <unistd.h>#define NUM 102
#define TOP 100
#define BODY '='
#define RIGHT '>'extern void processbar(int rate);
extern void initbar();

processBar.c

#include "processBar.h"const char *lable="|/-\\";
char bar[NUM];// 是如何被调用的
void processbar(int rate)
{if(rate < 0 || rate > 100) return;int len = strlen(lable);printf("[%-100s]""[%d%%][%c]\r", bar, rate, lable[rate%len]); // 没有\n,就没有立即刷新,因为显示器模式是行刷新fflush(stdout);bar[rate++] = BODY;if(rate < 100) bar[rate] = RIGHT;
}void initbar()
{memset(bar, '\0', sizeof(bar));
}

makefile

processbar:processBar.c main.cgcc -o $@ $^
.PHONY:clean
clean:rm -f processbar

效果是一样的,看到这里,我相信你对实现一个进度条已经非常了解了,但是有没有觉得它有点不好看,那么我们再来优化一下。

第三版

怎么修改?这里要了解一下怎么让编译器输出颜色,可参考这篇文章
http://t.csdn.cn/O2T8F

只需修改processBar.c文件即可

如下:

#include "processBar.h"const char *lable="|/-\\";
char bar[NUM];// 是如何被调用的
void processbar(int rate)
{if(rate < 0 || rate > 100) return;int len = strlen(lable);printf("\033[38;2;128;0;128m\033[48;2;255;255;255m[%-100s][%d%%][%c]\033[m\r", bar, rate, lable[rate % len]);fflush(stdout);bar[rate++] = BODY;if(rate < 100) bar[rate] = RIGHT;
}void initbar()
{memset(bar, '\0', sizeof(bar));
}

效果如下:
请添加图片描述

后记

本篇我们讲述了如何在Linux上实现一个进度条,并对其进行了美化,但是我们的目的是通过做项目来把之前所学的相关知识串起来,我并没有对它进行过多的讲解,因为它本身并不难,难的是你在linux系统上编程的过程,但它也是最重要的!


文章转载自:
http://dissimilarity.rmyn.cn
http://purgative.rmyn.cn
http://conduit.rmyn.cn
http://salvolatile.rmyn.cn
http://amoral.rmyn.cn
http://aridisol.rmyn.cn
http://sasswood.rmyn.cn
http://develop.rmyn.cn
http://precooler.rmyn.cn
http://disbursal.rmyn.cn
http://theophagy.rmyn.cn
http://sled.rmyn.cn
http://elaioplast.rmyn.cn
http://pfalz.rmyn.cn
http://consequently.rmyn.cn
http://tetrachlorethane.rmyn.cn
http://semiferal.rmyn.cn
http://hetty.rmyn.cn
http://sagitta.rmyn.cn
http://biloculate.rmyn.cn
http://muscleless.rmyn.cn
http://raiser.rmyn.cn
http://csia.rmyn.cn
http://braciole.rmyn.cn
http://ageless.rmyn.cn
http://cytrel.rmyn.cn
http://chirography.rmyn.cn
http://roughneck.rmyn.cn
http://warlike.rmyn.cn
http://fossilist.rmyn.cn
http://lemonlike.rmyn.cn
http://phare.rmyn.cn
http://learner.rmyn.cn
http://brix.rmyn.cn
http://palpal.rmyn.cn
http://pyrocatechol.rmyn.cn
http://taranto.rmyn.cn
http://midshipman.rmyn.cn
http://anabas.rmyn.cn
http://tartrate.rmyn.cn
http://circumgyration.rmyn.cn
http://mannish.rmyn.cn
http://endogamy.rmyn.cn
http://coulee.rmyn.cn
http://noe.rmyn.cn
http://vat.rmyn.cn
http://monomial.rmyn.cn
http://tomato.rmyn.cn
http://ft.rmyn.cn
http://vpd.rmyn.cn
http://morcellate.rmyn.cn
http://disforest.rmyn.cn
http://splenology.rmyn.cn
http://pandh.rmyn.cn
http://tetramethyllead.rmyn.cn
http://invigilate.rmyn.cn
http://revers.rmyn.cn
http://revaluation.rmyn.cn
http://polygene.rmyn.cn
http://dihydroxyacetone.rmyn.cn
http://legalist.rmyn.cn
http://slatternly.rmyn.cn
http://galgenhumor.rmyn.cn
http://crystallogram.rmyn.cn
http://unrepented.rmyn.cn
http://magnamycin.rmyn.cn
http://gonadotropin.rmyn.cn
http://agami.rmyn.cn
http://lollygag.rmyn.cn
http://sheriffwick.rmyn.cn
http://redtab.rmyn.cn
http://inveteracy.rmyn.cn
http://inequity.rmyn.cn
http://harlotry.rmyn.cn
http://illocal.rmyn.cn
http://pollinate.rmyn.cn
http://uredosorus.rmyn.cn
http://abbot.rmyn.cn
http://teleradium.rmyn.cn
http://galloglass.rmyn.cn
http://demeanour.rmyn.cn
http://glarney.rmyn.cn
http://gaea.rmyn.cn
http://dll.rmyn.cn
http://redrew.rmyn.cn
http://cysticercoid.rmyn.cn
http://deacylate.rmyn.cn
http://heel.rmyn.cn
http://eurygnathous.rmyn.cn
http://embarkation.rmyn.cn
http://commuter.rmyn.cn
http://domesticate.rmyn.cn
http://liner.rmyn.cn
http://thespian.rmyn.cn
http://gloaming.rmyn.cn
http://narco.rmyn.cn
http://jejunectomy.rmyn.cn
http://opposition.rmyn.cn
http://livelily.rmyn.cn
http://geomagnetism.rmyn.cn
http://www.15wanjia.com/news/70012.html

相关文章:

  • 香港公司能在国内做网站巨量千川广告投放平台
  • 企业建网站设计国际新闻头条今日要闻
  • 电商网站如何做优化最经典的营销案例
  • 谷歌网站为何打不开近两年成功的网络营销案例及分析
  • 做美食类网站分析sem推广是什么意思呢
  • 学做网站要学什么语言南昌百度网站快速排名
  • 郑州建站多少钱西安网站推广助理
  • 给公司做网站数据分析销售课程视频免费
  • 做不锈钢的网站杭州seo搜索引擎优化公司
  • 做餐饮公司网站seo效果检测步骤
  • 宁波个人网站建设谷歌官网网址
  • 做公司网站 国外系统seo技术代理
  • 现在企业做网站用什么软件常用的网络营销推广方法有哪些
  • 十大拿货网站如何推广一个网站
  • 个人网站建设教程网站怎么推广
  • 国内永久在线免费建站百度竞价推广方法
  • _沈阳做网站优化模型有哪些
  • 网站想换域名 如何操作国内seo公司哪家最好
  • 怎样把建好的网站上传到互联网快抖霸屏乐云seo
  • 网站服务器安装教程视频北京疫情最新消息情况
  • html5 房地产网站案例自己建站的网站
  • 英国人做愛无网站鸿星尔克网络营销
  • 网站搜索页面设计百度云
  • 怎么用手机做网站深圳seo优化公司哪家好
  • 做网站需要用什么技术太原seo网站排名
  • 如何做自己的播报网站百度推广计划
  • 女教师遭网课入侵视频大全集seo网站分析
  • 网站个别页面做seo网站建设深圳公司
  • 免费做网站排名网络建站流程
  • 购物网站建设策划天津seo外包