目录
- 回车换行问题
- 日常中的换行
- 代码中的回车换行
- 倒计时函数
- 进度条
回车换行问题
日常中的换行
即:
回车:回到当前行的最开始
换行:列不变,新起一行
代码中的回车换行
我们先看一段代码:
这个是带\n的
🌍结果是:
先输出 hello 彦祖
换了行5秒之后才会显示命令行
🌍效果:
🌏改变一下代码:
把\n去掉
结果是:
不换行,5秒后显示hello 彦祖+命令行
🌏效果:
那为什么会出现这种现象呢?下面我们了解一下缓冲区
在这里我们要知道,其实printf已经执行,但是数据没有被立刻刷新到显示器中,还在缓冲区中。
可以推出:
没有\n ,字符串会暂时保存起来
暂时保存的地方是:用户C语言级别的缓冲区
显示器设备的刷新策略就是行刷新\n ,即进行刷新!
倒计时函数
我们可以看到它是换行打印出来的。
可是我们想到的原地打印啊,那该怎么办呢?
怎么显示不出来呢?
\r不是光标回到首位吗?其实数据还在缓存区存着呢!
我们刷新一下缓冲区就好了
但这时又又又出现问题了:count>10以后个位一直不变了
其实解决这个问题很简单:
进度条
前面讲那么多,终于到进度条了。有人可能要问了,那前面那些有什么用呢?
其实进度条也是回车换行的问题,大同小异,我们一起来看看吧。
其实C语言也可以打印带颜色的字符,大家可以去百度一下。
代码:
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<string.h>
4
5 #define NUM 102//要留出\0和最后小符号的位置
6 int main()
7 {
8 char arr[NUM];
9 //初始化arr数组
10 memset(arr,'\0',sizeof(arr));
11 const char* lab ="|/-\\";
12 int i = 0;
13 while(i<=100)
14 {
15 printf("[%-100s] [%d%%] [%c]\r",arr,i,lab[i%4]);
16 //符号可以换
17 fflush(stdout);
18 arr[i++]='#';
19 usleep(100000);//0.1s,usleep单位是微秒
20 }
21 printf("\n");
22 return 0;
23 }