1. \r 和 \n
回车和换行符在 linux 系统下的 gcc 编辑器中,是能观测出有明显区别的。
2. 通过一个小程序观察现象
打印至屏幕有几点是需要注意的:
①
🐎代码:末尾什么都不加,刷新缓冲区,显式查看光标位置
编译输出结果:光标在行首停留 3s 后,同时打印出结果和命令提示符
③
🐎代码:打印末尾加 \n 回车,并使其可以显式查看光标位置
编译输出:光标在第二行位置停留 3s 后,继而打印命令提示符
④
🐎代码:打印末尾加 \r 回车(回到行开头),并使其可以显式查看光标位置,不刷新缓冲区
编译输出:缓冲区信息未出现,光标直接在空行最开始的位置,停留 3s ,随后该行被命令提示符覆盖
推论:\r 不能 刷新缓冲区
⑤
🐎代码:打印末尾加 \r 回车(回到行开头),并使其可以显式查看光标位置
编译输出:打印后,光标在该行最开始的位置,停留 3s ,该行被命令提示符覆盖
推论:\r 可以使光标回到最开始
3. 进度条
使用如上内容,写一个进度条如下:
① 创建文件包:
🐎② 代码:
main.c
proc.h
proc.c
#include "proc.h"
#include<string.h>
#include<unistd.h>
#define SIZE 52
#define STYLE '='
#define ARR '>'
void process()
{
char *lable = "|/-\\";
char bar[SIZE];
memset(bar,'\0',sizeof(bar));
int i = 0;
while(i <= 50)
{
printf("\033[0;32;31m[%-50s][%d%%][%c]\033[m\r", bar,i*2,lable[i%4]);
fflush(stdout);
bar[i++] = STYLE;
if(i != 50) bar[i] = ARR;
usleep(100000);
}
printf("\n");
}
③ 用 Makefile 运行文件包
Makefile
需要用到的命令:
生成可执行文件:make
执行可执行文件:./可执行文件名
清除可执行文件:make clean