一、fread函数和fwrite函数
1)函数功能
用来读写一个数据块。
2)一般调用形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
3)参数说明
(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。
(2)size:要读写的字节数;
(3)count:要进行读写多少个size字节的数据项;
(4)fp:文件型指针。
注意:1、 完成次写操(fwrite())作后必须关闭流(fclose());
2 、完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(FILE * fp)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出。
二、fprintf函数和fscanf函数
fprintf、fscanf的读写对象不是终端而是磁盘文件;
调用方式为:int fprintf(文件指针,格式字符串,输出表列 )返回值:返回实际输出的字符数,
操作不成功返回EOF
int fscanf(文件指针,格式字符串,输入表列 )返回值:返回输入的数据个数,
操作不成功返回EOF
fprintf(fp, "%d, %6.2f", i, t) 将整型变量 i 和实型变量 t 的值按%d和%6.2f的格式输出到fp所指向的文件中; 若i=3,t=4.5,则输出到磁盘中的格式为:3, 4.50相应的,从文件中读取数据时,则应用:
fscanf(fp, "%d, %f", &i, &t)
在运用fprintf与fscanf时,在向文件输出数据及从文件读取数据时,分隔符应该相一致。
三、使用fread和fwrite的优点就是二进制的读取是最快的。但是它们有缺陷,就是在
读取的时候 while(!feof(fp)) 不精确,往往会发现它多循环了一次。因为feof
()是根据剩余字符来判断是否文件结尾的,而文件的结尾标识符是'/0'是两个字
节,在读取'/'的时候feof()还是为false只有读取完'/0'的时候feof()==true。
致使产生多余的循环(如果使用while(!feof(fp))的话)。使用fprintf和fscanf
,因为这两个函数具有输入/输出的格式限制,即使在读取'/0'处有多余的循环,
但由于其不满足输入/输出格式,所以多余的循环被屏蔽掉。
最好就是这样:"%d/t%d/t" 这样的每个数字后面都是有限制的,这样就可以起到
很好的屏蔽作用。^^