对缓冲区的理解
案例
1.
printf("hello 104!\n");
sleep(2);
//现象:当运行后显示器会立即显示hello 104的内容;
2.
printf("hello 104!");----➡️去掉\n后
sleep(2);
//现象:当运行后过2秒后才显示hello 104的内容
printf肯定比sleep先执行了,只不过数据没有被立马显示出来罢了;
hello 104在缓冲区里面
对缓冲区的理解(先了解,以后会详讲)
✳️是缓冲区就是一段内存空间;
有两种策略:1.立马将内存中的空间显示出来—刷新策略(行刷新)
行刷新:你要输出的这行字符串是不是一个完整行,只要是一个完整行我就立马给你刷新出来,你不是对不起我就不刷新,等缓冲区满了或者程序退出了或是碰到了换行符我再把你刷新出去;
❓如果我不想用\n就想让你的数据立马刷新?
✳️就要谈谈stdout(标准输出);我们总共有三个输入输出流;现在呢我们想要数据立马刷新出来,我们就需要刷新一下stdout,因为我们是往显示器上打的数据;
❓那我们怎么去刷新呢?
✳️系统接口:fflush
用法
#include <stdio.h>
int fflush(FILE *stream);
案例
```css
printf("hello 104!");----➡️去掉\n后
fflush(stdout);
sleep(2);
当运行后hello 104数据立马显示出来
讲讲回车 vs 换行
✳️弄清楚回车与换行:就拿作文纸来举例,我们当我们在一行写了字,我们换行,严格意义上讲换行应该就是到你最后一个字的下方,而不是从头开始!
若是跳转到最左侧然后再到下行这严格意义上来讲是回车 ➕换行一起的功能(即回车就是将光标回到当前行的开始)
回车即为:\r;换行即为:\n;
✳️我们倒计时,是不是在一行里面数字是覆盖式的显示出来9 8 7…(同一个位置上)
int cnt =9;
while(cnt)
{
printf("%d\n",cnt);
sleep(1);
}
则会每隔一秒再另起一行打出数字(但不是我们想要的倒计时,按理应该是同一行同一个位置每隔一秒显示一个数字的,则应该是用\r,而不是\n)
while(cnt)
{
printf("%d\r",cnt);-----➡️改为\r
sleep(1);
}
会发现屏幕上一直不显示内容!
解答:因为没有触发行刷新!这就要用到fflush了
while(cnt)
{
printf("%d\r",cnt);-----➡️改为\r
fflush(stdout);
sleep(1);
}
这样便完成了!也是编写进度条到预备工作
进度条
#include <stdio.h>
2 #include <string.h>
3 #include <unistd.h>
4
5 #define NUM 101
6 void process()
7 {
8 char buf[NUM];
9 memset(buf,'\0',sizeof(buf));
10
11 const char* sign = "|/-\\";
12
13 int cnt =0;
14 while(cnt <= 100)
15 {
16 printf("[%-100s][%d%%]%c\r",buf,cnt,sign[cnt % 4]);//----预留100个空间出现一个#才占一个空间
17 fflush(stdout);
18 buf[cnt++] = '#';
19 usleep(20000);
20 }
21 printf("\n");
22 }
23
24 int main()
25 {
26 process();
27 return 0;
28 }
gitee
git什么是版本管理
✳️git是一个软件工具,gitee是基于git工具,搭建起来的网站
使用
#git clone ➕仓库地址
会要我们输入账号和密码(gitee的账号和密码)
便会给我们云服务器路径下给我们有一个仓库
若想提交test.c则输入#git add ➕test.c;然后git commit -m “我的练习”(吧test.c添加到本地仓库,然后“”里面输入的日志);然后#git push 然后输入账号和密码就能再远端仓库可以看到了;
git log可以看自己提交的历史信息