了解fscanf,fread的用法和区别

来源:互联网 发布:企业如何在淘宝开店 编辑:程序博客网 时间:2024/05/22 04:53

刚开始接触fscanf和fread函数时候,严格按照书上的写法,还算顺利,结果在自己写一些小练习的时候发现用fread一直出现烫烫烫,这里我先说一下这两个怎么用再讲一下区别。

fscanf:

函数原型:

 int  fscanf(FILE *fp,"格式化字符串",【输入项地址表】);

功能为:从文件指针fp所指向的文件中按照格式字符串指定的格式将文件中的数据送到输入项地址表中。若读取数据成功会返回所读取数据的个数,并将数据按照指定格式存入内存中的变量或数组中,文件指针自动向下移动;若读取失败则返回EOF。
注意:遇到空格和换行时结束

例如,E盘文件夹下test.txt中存有以下数据,该数据有学号,姓名,性别3项数据,每个数据之间用空格间隔,如图所示,现从该文件中读取出该条数据给指定的变量。

char num[20],name[40],sex[5];FILE *fp;fp=fopen("e:\\code\\test.txt","rt");fscanf(fp,"%s %s %s",num,name,sex);

首先,以只读方式打开指定文件,然后将文件中的学号,姓名,性别分别赋给字符数组num,name和sex。

fread:

函数原型:

int fread(void *buffer,int size,int count,FILE *fp);

功能为:从文件指针fp所指向的文件的当前位置开始,一次读入size个字节,重复count次,并将读取到的数据存到buffer开始的内存区中,同时将读写位置指针后移size*count次。该函数的返回值是实际读取的count值。
buffer:是一个指针,在fread函数中,它表示存放读入数据的首地址(即存放在何处)。
size:表示数据块的字节数。
count:表示要读写的数据块快数。
fp:表示文件指针。
例如:

float fa[5];fread (fa,4,5,fp);

其意义是从fp所指的文件中,每次读入4个字节送入到实型数组fa中,连续读5次,即读5个实数到fa中。

接下来说一下这两个区别

首先一定要记住fread函数只用于读二进制文件,而fscanf可以读文本也可以读二进制。
其次在用链表进行文件的读取建议用fscanf(当然也可以先踩踩坑)。

注意下面这段话(这个也是自己在网上找的)

文本方式不能完全读取, 而二进制方式能的原因- 文本方式读取文件, 最主要的用处是一次读取一整句( 以换行符’/n’, 即二进制的换行标志”/r/n”结束 ), 方便用于特殊用处ReadString、fscanf(…,”%s”,…)之类, 每次读取的内容长度是不定的; 而二进制读取方式Read、fread等, 都是读取固定长度 所以文本方式读取对EOF的判定, 是一个文件尾结束标志, 如果是文本文件, 则这个文件尾肯定不会出现在文件内容中( 因为是不可打印字符构成的结束标志, 人可读的文本文件不会包括它 ), 这样以结束标志为文件尾则是可以的; 二进制文件内容可以是任意字节, 如果把它当文本文件来读, 以文件尾为结束, 当然可能出现把文件内容判定为文件尾的情况; 二进制读取方式由于每次读取固定字节, 所以只需要用总文件长度( 这个数值是系统管理的数值, 不是计算得出来的 )减去每次读取的长度( 或根据Seek的位置计算长度 ), 就可以知道是否到文件尾, 不需要定义结束标志; 所以用二进制方式打开任何文件都是合理的

第一次写,还是有点小兴奋的,嘿嘿,欢迎任何大佬好的建议。

阅读全文
1 0
原创粉丝点击