当前位置: 首页 > 科技观察

linux下软件安装进度条怎么弄?

时间:2023-03-15 19:24:50 科技观察

1、回车换行就是换到下一行的当前位置,一般用\n表示。回车就是返回到当前行的开头,一般用\r表示。但是一般在语言中,比如C语言,都是用\n来表示换行+回头。二、缓冲区先看两段代码和它们的现象。第一段代码,代码很简单,主要是和第二段对比。#include#includeintmain(){printf("Iamaproc\n");//是\nsleep(3);返回0;}先打印,然后睡眠持续3秒,非常自然的结果。第二段代码:#include#includeintmain(){printf("Iamaproc");//No\nsleep(3);返回0;}Second代码运行结果如下。从结果来看,似乎在打印前睡眠持续了3s。其实在上面的代码中,因为printf在sleep之前,所以printf总是在sleep之前执行,但是先执行printf并不代表先打印。printf执行后,将要打印的内容放入缓冲区,但可能不会立即刷新到屏幕。下面介绍缓冲区的三种缓冲策略:1.不缓冲:数据不缓冲,直接打印到外设(屏幕、磁盘等)。2、行缓冲:先保存一行数据,刷新时再按行刷新(遇到\n时将之前的内容刷新到外设)。3.缓冲区满:缓冲区满后才会刷新。结合上面两段代码和现象可以得出结论,上面的打印使用了行缓冲(遇到\n时将要打印的内容打印到屏幕上)。3、如果倒计时程序每次打印完都回车,相当于在第一个位置打印一个数字,然后回到这个位置继续打印下一个数字。这样就可以达到倒计时的效果。#include#includeintmain(){intcount=3;while(count>=0){printf("%d\r",count--);睡觉(1);}返回0;}但是结果如下,并没有打印结果。想想行缓冲的规则,原来内容一直保存在缓冲区中,不会被打印出来,因为打印出来的内容没有换行符。这里可以使用fflush函数强制刷新屏幕,就可以达到想要的效果。使用fflush来flushstdout(即屏幕的文件流),这样每次进入buffer的内容都会立即打印出来。#include#includeintmain(){intcount=3;while(count>=0){printf("%d\r",count--);fflush(标准输出);睡觉(1);}返回0;}效果如下但是如果是两位数以上的倒计时,会出现如下问题:#include#includeintmain(){intcount=10;while(count>=0){printf("%d\r",c伯爵--);fflush(标准输出);睡觉(1);}返回0;}因为每次回车都返回到第一个字符,所以第二个0没有变,直接使用printf的格式控制即可。#include#includeintmain(){intcount=10;while(count>=0){//控制两个字符的输出printf("%2d\r",count--);fflush(标准输出);睡觉(1);}返回0;}运行效果如下:4.进度条程序#include#include#includevoidProcBar(){inti=0;字符过程[102];memset(proc,'\0',sizeof(proc));while(i<=100){//C语言格式控件默认对对齐,所以在前面加-改为左对齐printf("[%-100s][%d%%]\r",proc,i);fflush(stdout);//刷新屏幕打印proc[i]='#';usleep(100000);//以微秒为单位休眠i++;}printf("\n");}intmain(){ProcBar();返回0;}