在Linux下换行和回车的区别在于\r让光标会到当前行的开始,\n让光标回到下一行的开始。进度条是在同一行输出,所以要用\r实现而进度条由0%~100%。
缓存区:无缓存,行缓存,全缓存
无缓存:指没有缓冲,直接将信息打印在显示器上,比如标准错误stderr
行缓存:输入输出遇到换行的时候才执行。
全缓存:输入输出的时候写满缓存区的时候执行I/O操作
fflush:清除读写缓存区,需要立即把输入缓存区的数据进行物理写入
fflush(stdin):刷新标准输入缓冲区,把输入缓冲区的数据清楚
fflush(stdout):刷新标准输出缓冲区,把输出缓存区的数据打印到输出设备上
usleep:单位时间微妙,挂起进程。sleep单位时间秒。
printfs输出颜色控制如下图:"\e[40;33m] \e[0m]"
40表示背景颜色,33表示输出字体颜色,\e[40;33m] \e[0m]中间为颜色控制部分
颜色:0(黑)1(红)2(绿)3(黄)4(蓝)5(洋红)6(青)7(白)
字体色:30+颜色值
背景色:40+颜色值
#include<stdio.h>
#include<string.h>
#include<unistd.h>
int main()
{
int i = 0;
char bar[102];
memset(bar,'\0',sizeof(bar));
const char *a="|/-\\";
for(;i<=100;i++)
{
bar[i] = '*';
if(i%4 == 1)
{
printf("\e[40;33m[%-101s]\e[0m[%d%%][\e[34m%c\e[0m]\r",bar,i,a[i%4]);
}
if(i%4 == 2)
{
printf("\e[40;35m[%-101s]\e[0m[%d%%][\e[33m%c\e[0m]\r",bar,i,a[i%4]);
}
if(i%4 == 3)
{
printf("\e[40;31m[%-101s]\e[0m[%d%%][\e[32m%c\e[0m]\r",bar,i,a[i%4]);
}
if(i%4 == 0)
{
printf("\e[40;37m[%-101s]\e[0m[%d%%][\e[31m%c\e[0m]\r",bar,i,a[i%4]);
}
fflush(stdout);
usleep(100000);
}
printf("\n");
}