倒计时
理解
printf 打印的内容是被放在输出缓冲区的
fflush(stdout)
刷新 输出缓冲区;\n
也是一种刷新的策略我们称之为行刷新
理解一下回车换行
首先:回车是回车 换行是换行
回车是回到这一行的开头
换行是换到下一行
所以我们平时使用的 Enter 键 其实是执行了两个操作的
\r
表示的是只回车的意思
下面是一个倒计时代码
具体实现
#include<stdio.h>
#include<unistd.h>
int main()
{
int cnt = 9;
while(cnt)
{
printf("%d\r",cnt);
fflush(stdout); //这一步的目的是刷新缓冲区,如果没有这一步你啥也看不到
cnt--;
}
它的原理就是只回车不换行让新的数字覆盖掉原来的数字
需要注意的是你需要刷新一下缓冲区如果不刷新缓冲区的话,你打印的内容就在缓冲区中 显示器上就啥也看不见
进度条的推进
原理:
第一次打印一个:#
然后只回车到行首
第二次打印两个:##
然后只回车到行首
第三次打印三个:###
这样进行下去,在视觉上就是一个进度条的推进了
#include"process.h"
#include<string.h>
#include<unistd.h>
// 函数的定义
#define SIZE 101
#define MAX_RATE 100
#define STYLE '#'
#define STIME 1000*40
const char *str = "|/-\\";
void process()
{
//version 1
int rate = 0; //循环
char bar[SIZE]; //#号的个数
memset(bar,'\0',sizeof(bar));
int num = strlen(str);
while(rate <= MAX_RATE)
{
printf("[%-100s][%d%%][%c]\r",bar,rate,str[rate%num]);//rate%num 是为了防止越界
fflush(stdout);
usleep(STIME);
bar[rate++] = STYLE;
}
printf("\n");
}