【 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); }一个更实用更具有封装性的进度条就完成了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2637343.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!