文章目录
- 1.回车与换行
- 2.缓冲区的概念
- 3.倒计时
- 4.进度条(第一版无应用场景)
- 5.进度条(第二版有应用场景)
1.回车与换行
2.缓冲区的概念
强制刷新可以使用冲刷函数fflush
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("I am a \nhandsome man!");
fflush(stdout);
sleep(3);
return 0;
}
这样就可以强制刷新出来了!
3.倒计时
1 #include <stdio.h>
2 #include <unistd.h>
3
4 int main()
5 {
6 int cnt=10;
7 while(cnt>=0)
8 {
9 printf("%2d\r",cnt);
10 fflush(stdout);
11 cnt--;
12 sleep(1);
13 }
14 printf("\n");
15 return 0;
16
17 }
4.进度条(第一版无应用场景)
大制作一个这个样子的进度条:
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#define Length 101
#define style '#'
const char* lable = "|/-\\";//两个\\表'\'符号,因为\n,\r有其他意思
void procbar()
{
char bar[Length];
memset(bar, '\0', sizeof(bar));
int len = strlen(lable);
int cnt = 0;
while (cnt <= 100)
{
printf("[%-100s][%d%%][%c]\r", bar,cnt,lable[cnt%len]);//100s从左向右打印(默认右对齐),-100s即为左对齐、、lable[cnt%len]防止越界
fflush(stdout);
bar[cnt] = style;
cnt++;
usleep(20000);
}
printf("\n");
}
int main()
{
procbar();
return 0;
}
5.进度条(第二版有应用场景)
我们的进度条不可能像第一版一样光一个进度条在那跑。
肯定是有相关场景的,比如要下载文件大小多少,带宽多少。。等等
源码:
makefile:
processbar.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "processbar.h"
#include <string.h>
#include <Windows.h>
#define Length 101
#define style '#'
const char* lable = "|/-\\";//两个\\表'\'符号,因为\n,\r有其他意思
//第一版本
//void procbar()
//{
// char bar[Length];
// memset(bar, '\0', sizeof(bar));
// int len = strlen(lable);
// int cnt = 0;
// while (cnt <= 100)
// {
// printf("[%-100s][%d%%][%c]\r", bar,cnt,lable[cnt%len]);//100s从左向右打印(默认右对齐),-100s即为左对齐、、lable[cnt%len]防止越界
// fflush(stdout);
// bar[cnt] = style;
// cnt++;
// Sleep(1);//这里要改
// }
// printf("\n");
//}
//第二版本
void procbar(double total, double current)
{
char bar[Length];
memset(bar, '\0', sizeof(bar));
int len = strlen(lable);
int cnt = 0;
double rate= (current * 100.0) / total;
int loop_count = (int)rate;//将文件大小换算为百分比制,不乘100.0的话算下来是一个小数,取整就恒为0了
while (cnt <= loop_count)
{
bar[cnt] = style;
cnt++;
Sleep(1);
}
printf("[%-100s][%.1lf%%][%c]\r", bar, rate, lable[cnt % len]);//100s从左向右打印(默认右对齐),-100s即为左对齐、、lable[cnt%len]防止越界
fflush(stdout);
//printf("\n");
}
main.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "processbar.h"
#include<Windows.h>
double filesize = 100 * 1024 * 1024;//第一个1024是字节,1024*1024是1M,这个大小总共是100M
void download()
{
double filesize = 100 * 1024 * 1024 * 1.0;
double current = 0.0;//累计下载的数据量
double bandwidth = 1024 * 1024*1.0;//带宽
printf("下载开始,当前进程为:%lf\n", current);
while (current <= filesize)
{
procbar(filesize,current);//动态打印出任意时刻的进度条
//从网络中获取数据
current += bandwidth;
Sleep(1);
}
printf("\n下载完成,下载大小为:%lf\n", filesize);
}
int main()
{
download();
/*procbar(100.0,56.9);
procbar(100.0, 99.9); //这三个地方是指定下载到百分之多少
procbar(100.0, 10.1);*/
return 0;
}
processbar.h
#pragma once
#include <stdio.h>
void procbar(double total, double current);