背景知识
1.回车换行
在生活中,我们不是很清楚回车换行的区别,只以为是从一行换到下一行,认为这是一个概念。其实在计算机中,回车和换行是两个东西
回车是指跳回这一行的行首 \r
换行是指跳到下一行,列位置不变 \n
所以计算机在换行的时候是先换行再回车的
2.sleep 和usleep
函数名: sleep
头文件: #include <unistd.h> // 在gcc编译器中,使用的头文件因gcc版本的不同而不同
功 能: 执行挂起指定的秒数
函数名: usleep
头文件: #include <unistd.h>
功 能: usleep功能把进程挂起一段时间, 单位是微秒(百万分之一秒)
时钟换算:
微秒,时间单位,符号us(英语:microsecond ).
1微秒等于百万分之一秒(10的负6 次方秒)
0.000 001 微秒 = 1皮秒
0.001 微秒 = 1纳秒
1,000 微秒 = 1毫秒
1,000,000 微秒 = 1秒
1s = 1000ms
1ms = 1000μs
1μs = 1000ns
1ns = 1000ps
1秒(s) = 1000 毫秒(ms) = 1,000,000 微秒(μs) = 1,000,000,000 纳秒(ns) = 1,000,000,000,000 皮秒(ps)
3.fflush
计算机在执行程序时会打开三个流 stdin、stdout、stderror
fflush用于清空缓冲流,虽然一般感觉不到,但是默认printf是缓冲输出的。
fflush(stdout),使stdout清空,就会立刻输出所有在缓冲区的内容。
在printf()后使用fflush(stdout)的作用是立刻将要输出的内容输出。
当使用printf()函数后,系统将内容存入输出缓冲区,等到时间片轮转到系统的输出程序时,将其输出。
使用fflush(out)后,立刻清空输出缓冲区,并把缓冲区内容输出。
例如:
for (ctr = 1; ctr <= wait; ctr++)
{
printf("."); /* print a dot */
fflush(stdout); /* force dot to print on buffered machines */
sleep(1); /* pause 1 second */
}
用fflush(stdout)能使机器每输出一个.暂停一秒钟,而不会出现乱序(例如:PP。。。PP。PPP。。。等)现象。
程序分析
#include<stdio.h>
#include<unistd.h>
int main()
{
int i = 0;
char bar[102]; //0到100 有101个数,102位置存放'\0'
const char *lable = "-\\|/";//每次刷新显示不一样的字符,表示进度条在加载
bar[0] = '\0';
while (i <= 100)
{
printf("[%-101s][%d%%][%c]\r",bar,i,lable[i%4]);//%-101s表示字符串靠左输出空出101格,\r回车符跳到行首
fflush(stdout); //刷新标准输出流
bar[i++] = '=';// = 表示进度条已经走过的部分
bar[i] = '\0';
usleep(50000);
}
printf("\n");
return 0;
}
结果如图