> 作者简介:დ旧言~,目前大二,现在学习Java,c,c++,Python等
> 座右铭:松树千年终是朽,槿花一日自为荣。> 目标:自己能实现进度条
> 毒鸡汤:
> 望小伙伴们点赞收藏✨加关注哟
咱们学习这么久的指令,一句话来概括,都忘光咯,学个锤锤,感觉白学了,博主也是感同身受,毕竟没有相应的练习,很容易遗忘,咱们只要记住主要的指令就可以了,忘了或者不熟咱就查查文档。今天捏我们用我们所学的知识编写一个进度条,看看下面:
QQ录屏20231129162350
C语言会提供一些特殊的字符,比如说我们常用的\n,这个字符大家都不陌生,不就是换行嘛,这个我懂,但是还有一个字符\r,这个字符的作用是回车的意思。在这块就有人说不都是一个意思嘛,敲敲这些老铁们的头,当然不可能是一个意思。
\r(回车):
- 就是在第二行让光标跳到最开始的位置,这个操作就是回车。
\n(换行):
- 让光标从第一行跳到第二行,但是光标只是垂直向下跳,并没有在第二行的开始。这个操作就是换行。
直接说字符的意思就有一点抽象,咱们来个代码看看
\n(换行):代码
#include
int main()
{
printf("hello world\n");
return 0;
}
\r(回车):代码
#include
int main()
{
printf("hello world\r");
return 0;
}
基于上面的原因我这不讲解,在后面的缓冲区里面我们详细讲解。
这里我们要知道什么是缓冲区,咱可以看看官方用语:缓冲区处理 - Windows drivers | Microsoft Learn
简单来讲就是:
咱们再看看这两张图片:
我们知道用 \n 的话就可以打印出来,而 \r,不能打印出来。
使用这个函数是在
咱们先看这些个函数的作用
咱们来个简单的代码看看这些函数作用:
#include
#include
int main()
{
printf("hello world\r");
//刷新缓冲区
fflush(stdout);
printf("\n");
//休眠三秒
sleep(3);
return 0;
}
实现进度条咱们得先实现一下简单的倒计时,为了给进度条铺垫,简单来讲就是当炮灰。
效果演绎:
全部代码:
#include
#include
int main()
{
int cnt = 10;
while(cnt >= 0)
{
printf("%-2d\r",cnt);
fflush(stdout);
sleep(1);
cnt--;
}
printf("\n");
return 0;
}
过程分析:
原理:其原理就是不断地覆盖,然后将其像早以前的动画片一样,变成一个动画。
QQ录屏20231129162350
game.h
#include
#include
#include
void game(double rate);
void download();
game.c
#include"game.h"
#define MAX 1024*1024*1024
char* buff = "|/-\\";
int i = 0;
char arr[102] = { 0 };
void game(double rate)
{
if (rate <= 1.0)
{
arr[0] = '=';
}
printf("[%-100s][%.1lf%%][%c]\r", arr, rate, buff[i % 4]);
fflush(stdout);
arr[(int)rate] = '=';
if (rate< 99.0)
{
arr[(int)rate+1] = '>';
}
i++;
}
void download()
{
srand(time(NULL)^1023);
int max = MAX;
int cnt = 0;
double rate = 0;
while (rate<100.0)
{
cnt+= rand() % (1024*1024);
rate = ((cnt*1.0)/max)* 100;
if (rate > 100)
{
rate = 100;
}
game(rate);
usleep(50000);
}
}
test.c
#include"game.h"
int main()
{
download();
return 0;
}
makefile
all:test.o game.o
gcc -o $@ $^
test.o:test.c
gcc -c -o $@ $^
game.o:game.c
gcc -c -o $@ $^
.PHONY:clean
clean:
rm -rf *.o all
今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小说手给博主一键三连,有你们的支持是我最大的动力,回见。