准备工作:
一.关于缓冲区
首先,咱们先来一段有意思的代码:
代码语言:javascript复制#include<stdio.h>
#include<unistd.h>
int main()
{
printf("you can see me");
sleep(5);
}
你可以在你的本地运行一下,这里我告诉大家运行结果:这一段字符串等到程序运行结束后才被显示出来。有些同学感觉非常震惊,但这就是运行结果。
我们都知道,这段代码是顺序运行结构,就是从前往后依次执行,毫无疑问,这段字符串肯定被优先执行,那么,为什么没有被显示出来?这5秒内,字符串在什么位置?
字符串一直在缓冲取内,等到运行结束时,才被刷新出来。那,怎么才能让字符串在sleep前出现呢?
这里,我说明两种方式:
方式一:
代码语言:javascript复制#include<stdio.h>
#include<unistd.h>
int main()
{
printf("you can see men");
sleep(5);
}
在printf中加入换行符,因为n默认的是行刷新,
代码语言:javascript复制#include<stdio.h>
#include<unistd.h>
int main()
{
printf("you can see men");
printf("you can see ");
sleep(5);
}
我们来运行一下,会发现:第一字符串打印出来了,第二个字符串等到程序结束时,才显示出来!
方式二:
代码语言:javascript复制#include<stdio.h>
#include<unistd.h>
int main()
{
printf("you can see men");
fflush(stdout)
sleep(5);
}
fflush(stdout)表示手动刷新缓冲区的操作。
二.r,n
r是回车,n是换行,所以rn 是回车换行,但是在语言层面,n就代表着回车 换行。
我们举个栗子:
代码语言:javascript复制#include<stdio.h>
int main()
{
printf("aaaaar");
printf("11");
return 0;
}
运行结果是:
果真像我们分析的那样,程序运行完第一行,"aaaaa"被打印出来,然后光标回到行首,开始打印"11",这个位置原来的数据被后来的数据所覆盖,所以打出来,就是这个样子。
三.关于显示屏
其实,不知道大家有没有好奇过:我们的数字和字母都是怎么出现在显示屏的呢?原理很简单!!
在显示屏看来,不过是字符还是数组还是汉字,都是由字符构成,比如在显示屏上打印出1234,显示屏就把1234看作4个字符,然后点亮这4个字符的光点,所以,我们就看见了1234。
四.制作一个一分钟倒计时
代码语言:javascript复制#include<stdio.h>
#include<unistd.h>
int main()
{
int num = 60;
while (num)
{
printf("%dr", num);
fflush(stdout);
num--;
}
}
二.制作一个进度条
效果演示:
写在前面,这个进度条,我们准备分文件写,分别为main.cc,process.cc,process.h,下面,将一一介绍各个文件的作用:
进度条代码:
makefile:
代码语言:javascript复制myproc:process.cc main.cc
gcc -o myproc process.cc main.cc //-o后边的文件默认为生成的文件,其他的都是依赖文件
.PHONY:clean
clean:
rm -f myproc
main.cc:
代码语言:javascript复制#include "process.h"
int main()
{
myprocess();
}
代码so easy!!
process.h:
代码语言:javascript复制#include<stdio.h>
#include<string.h>
#include<unistd.h>
#define Num 101
#define STYLE '#'
const char lable[]="|/-\";
extern void myprocess();
process.cc:
代码语言:javascript复制#include "process.h"
void myprocess()
{
int cnt=0;
char buf[Num];
memset(buf,'