进度条
回车\r&&换行\n
回车,换行是两个不同的概念
回车表示光标回到所在行的行首;换行表示从光标所在行直接跳到下一行,相对位置不发生变化
行缓冲区概念
观察下面两段代码执行的结果
1 #include<stdio.h>
2 #include<unistd.h>
3 int main()
4 {
5 int i =10;
6 while(i)
7 {
8 printf("剩余时间:%2d\r",i);
9 i--;
10 sleep(1);
11 }
12 return 0;
13 }
1 #include<stdio.h>
2 #include<unistd.h>
3 int main()
4 {
5 int i =10;
6 while(i)
7 {
8 printf("剩余时间:%2d\n",i);
9 i--;
10 sleep(1);
11 }
12 return 0;
13 }
两段代码唯一的区别就是输出打印时第一个是回车打印,第二个时是换行打印结果却相差很大,原因便是:两种打印的缓冲区不同,第一个是打印到缓冲区,第二个是打印到行缓冲区,缓冲区的区别之后再进行学习,这里只作为了解
进度条代码
首先一个概念,凡是能显示到显示器上的都是字符
根据上面的学习,在进度条的打印中一定是使用回车打印,不过呢,上面的代码还是有些问题的。进度条肯定是在原地打印,总不能随着进度的加载,打印也冲页首打印到页尾。所以,在每次打印之后重新刷新输出,便可解决这个问题
代码分为四个文件:Makefile,源文件,头文件,进度条文件
头文件
1 #pragma once
2 #include<stdio.h>
3 #include<string.h>
4 #include<unistd.h>
5
6 #define NUM1 5
7 #define NUM2 100
8
9 extern void Process();//函数声明
源文件
1 #include"Process.h"
2 int main()
3 {
4 Process();
5 return 0;
6 }
Makefile
1 Process:test.c Process.c
2 gcc test.c Process.c -o Process
3 .PHONY:clean
4 rm -f Process
进度条文件
扫描二维码关注公众号,回复:
15214862 查看本文章
1 #include"Process.h"
2 char style[NUM1]={
'-','.','#','>','+'};
3 void Process()
4 {
5 int i=0;
6 char ch[NUM2];
7 memset(ch,'\0',sizeof(ch));
8 //加载符号
9 const char*label="|\\_/";
10
11 while(i<=100)
12 {
13 printf("[%-100s][%d%%][%c]\r",ch,i,label[i%4]);
14 fflush(stdout);
15 ch[i++]=style[2];
16 //休眠50000毫秒
17 usleep(50000);
18
19 }
20
21 printf("\n");
22 }