【 linux 】来完成一个进度条吧
c语言是有缓冲区的缓冲区刷新有三种方式输入\n程序结束后自动刷新fflushstdout手动刷新。效果展示视觉上#是逐个往后加的这是视觉欺骗。事实是每次#都是从头开始的只不过计算机的执行速度非常快肉眼看不出来。这就需要每次都让光标回退到最开始\r操作就可以并且每次都需要fflush手动刷新。我们键盘上的Enter操作实际上是换行\n和光标回退\r两个操作。我们发现在每次打印出‘#’是有一个时间间隔的这个可以用sleep函数实现单位是秒。也可以用usleep函数单位是微秒。一个最简单但不太实用的进度条程序就写好了#includestdio.h #includestring.h #includeunistd.h #define Count 101 #define Simple # int main() { char buffer[Count]; memset(buffer,0,sizeof(buffer)); int cnt0; const char*lable|/-\\; int lenstrlen(lable); while(cntCount){ printf([%-100s][%d%%][%c]\r,buffer,cnt,lable[cnt%len]); fflush(stdout); buffer[cnt]Simple; usleep(30000); cnt; } printf(\n); return 0; }通常下载一个文件时是有数据量和下载速度的。可以用double类型的变量表示。double total1024.0; double speed100.0; void DownLoad() { double current0; while(currenttotal) { FlushProcess(total,current); usleep(3000); currentspeed; } printf(\ndownload %.2lfMB done\n,current); }一个更实用更具有封装性的进度条就完成了。