话不多说,先贴源码,后面是讲解
#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,喜欢的就点个赞吧