贵阳做网站的公司有哪些,国内免费制作网页的网站,网站呢建设,导航网站好处准备工作#xff1a;
一.关于缓冲区
首先#xff0c;咱们先来一段有意思的代码#xff1a;
#includestdio.h
#includeunistd.h
int main()
{printf(you can see me);sleep(5);}
你可以在你的本地运行一下#xff0c;这里我告诉大家运行结果…准备工作
一.关于缓冲区
首先咱们先来一段有意思的代码
#includestdio.h
#includeunistd.h
int main()
{printf(you can see me);sleep(5);}
你可以在你的本地运行一下这里我告诉大家运行结果这一段字符串等到程序运行结束后才被显示出来。有些同学感觉非常震惊但这就是运行结果。
我们都知道这段代码是顺序运行结构就是从前往后依次执行毫无疑问这段字符串肯定被优先执行那么为什么没有被显示出来这5秒内字符串在什么位置
字符串一直在缓冲取内等到运行结束时才被刷新出来。那怎么才能让字符串在sleep前出现呢
这里我说明两种方式
方式一
#includestdio.h
#includeunistd.h
int main()
{printf(you can see me\n);sleep(5);}
在printf中加入换行符因为\n默认的是行刷新
#includestdio.h
#includeunistd.h
int main()
{printf(you can see me\n);printf(you can see );sleep(5);} 我们来运行一下会发现第一字符串打印出来了第二个字符串等到程序结束时才显示出来
方式二
#includestdio.h
#includeunistd.h
int main()
{printf(you can see me\n);fflush(stdout)sleep(5);}fflush(stdout)表示手动刷新缓冲区的操作。
二.\r,\n \r是回车\n是换行所以\r\n 是回车换行但是在语言层面\n就代表着回车换行。 我们举个栗子
#includestdio.h
int main()
{printf(aaaaa\r);printf(11);return 0;
}
运行结果是 果真像我们分析的那样程序运行完第一行aaaaa被打印出来然后光标回到行首开始打印11,这个位置原来的数据被后来的数据所覆盖所以打出来就是这个样子。
三.关于显示屏
其实不知道大家有没有好奇过我们的数字和字母都是怎么出现在显示屏的呢原理很简单
在显示屏看来不过是字符还是数组还是汉字都是由字符构成比如在显示屏上打印出1234显示屏就把1234看作4个字符然后点亮这4个字符的光点所以我们就看见了1234。
四.制作一个一分钟倒计时
#includestdio.h
#includeunistd.h
int main()
{int num 60;while (num){printf(%d\r, num);fflush(stdout);num--;}
}
二.制作一个进度条
效果演示 写在前面这个进度条我们准备分文件写分别为main.cc,process.cc,process.h,下面将一一介绍各个文件的作用
进度条代码
makefile:
myproc:process.cc main.cc gcc -o myproc process.cc main.cc //-o后边的文件默认为生成的文件,其他的都是依赖文件
.PHONY:clean
clean:rm -f myprocmain.cc:
#include process.hint main()
{myprocess();}
代码so easy
process.h:
#includestdio.h
#includestring.h
#includeunistd.h#define Num 101
#define STYLE #const char lable[]|/-\\;
extern void myprocess();
process.cc:
#include process.hvoid myprocess()
{int cnt0;char buf[Num];memset(buf,\0,sizeof buf);//利用字符串初始化函数初始化字符串为0while(cntNum){if(cntNum-1)buf[cnt]TAIL;printf([%-100s][%-3d%%][%c]\r,buf,cnt,lable[cnt%4]);//[%-100s]:先留出100个字符的长度保证从前往后显示;%%:表示百分号buf[cnt]STYLE;fflush(stdout);usleep(50000);//usleep:和sleep效果相同但usleep以微妙为单位但sleep以秒为单位}printf(\n);
}3、实现过程分析
进度条样式 主体样式为两个中括号包裹中间 推进的方式呈现比如[] 主体右侧中括号位置保持不变中间元素不断推进比如[ ] 因此我们把中间主体 宏定义为 STYLE把尾侧 宏定义为 TAIL
进度条百分比 显示当前加载进度用 [rate%] 显示rate 随着进度条的不断推进而变化而打印 %转义字符则需要两个 %%
进度条旋转字符 显示加载样式可以利用一个旋转的字符例如 [] 的样式顺时针不断旋转依次为 “| / - \”注意 \ 也是转义字符因此需要两个 \ \对此我们定义一个lable指针指向常量字符串const char *lable | / - \