您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页【linux】\r 和 \n 的区别、缓冲区的刷新情况、实例:进度条(用 Makefile 自动化构建)

【linux】\r 和 \n 的区别、缓冲区的刷新情况、实例:进度条(用 Makefile 自动化构建)

来源:五一七教育网

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("[%-50s][%d%%][%c]\r", bar,i*2,lable[i%4]);
		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); //微秒,1s = 10^6um,这里是0.1s 
	}
	printf("\n");
}

③ 用 Makefile 运行文件包
Makefile

需要用到的命令:

生成可执行文件:make


执行可执行文件:./可执行文件名

清除可执行文件:make clean


因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务