您的位置:首页 > 其它

进度条函数

2017-02-17 13:43 127 查看
在写进度条函数之前,我们要先明确几个概念:

一·回车换行:

'\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖;

'\n' 换行,换到当前位置的下一行,而不会回到行首;

Unix系统里,每行结尾只有“<换行>”,即"\n";Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”,即"\r";。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

分别在Windws和Linux中查看此文件可知:

Linux中遇到换行符("\n")会进行回车+换行的操作,回车符反而只会作为控制字符("^M")显示,不发生回车的操作。而windows中要回车符+换行符("\r\n")才会回车+换行,缺少一个控制符或者顺序不对都不能正确的另起一行。

在windows   系统中,当你输入回车时会自动变成\r\n

在linux下的回车键只代表\n

而在windows下的回车键表示\r\n

\n为进入下一行,\r为打印头回到行首上

linux/unix下只用\n,它就表示回车+换行
而windows下,\r只回车不换行的,\n是换行,但在有些编辑中,单独的\n是不会换行的

二·fflush函数

fflush()函数冲洗流中的信息,该函数通常用于处理磁盘文件。

函数名: fflush

功 能: 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时

头文件:unistd.h

原型:int fflush(FILE *stream)

其中stream是要冲洗的流

fflush()会强迫将缓冲区内的数据写回参数stream 指定的文件中. 如果参数stream 为NULL,fflush()会将所有打开的文件数据更新

返回值:fflush 的返回值类型是int类型,那么这个int类型具体的返回是什么呢?

如果成功刷新,fflush返回0。指定的流没有缓冲区或者只读打开时也返回0值。返回EOF指出一个错误。

注意:如果fflush返回EOF,数据可能由于写错误已经丢失。当设置一个重要错误处理器时,最安全的是用setvbuf函数关闭缓冲或者使用低级I/0例程,如open、close和write来代替流I/O函数

其他用法:

fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃[非标准]

fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上

产生进度条的元素:

      1.一个不断向右增长的容器,可以直观看出当前的进度。   

      2.一个反应进度的百分比,在这里用到转义字符"%%",代表的是"%"

      3.一个标志,反应该进度是正在运行还是卡死,在程序中体现的是char *label="-\\|/";,是顺时针输出.

完整代码:



 Makefile的编写:

      

 Makefile用于简化代码的编译链接过程,而Makefile中最重要的就是依赖函数和依赖关系.

单步编写Makefile






当编写好Makefile之后就是利用它来编译这个进度条的代码:



清理代码:



更简洁的Makefile编写







该Makefile的编写将预编译,编译,汇编以及链接直接执行,不容易出错,执行过程如下:







至此,进度条函数就编写成功了。
 在windows   系统中,当你输入回车时会自动变成\r\n

在linux下的回车键只代表\n

而在windows下的回车键表示\r\n

\n为进入下一行,\r为打印头回到行首上

linux/unix下只用\n,它就表示回车+换行
而windows下,\r只回车不换行的,\n是换行,但在有些编辑中,单独的\n是不会换行的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息