实际应用中,常常要求1次读/写1个数据块。数据块可以是一个整型、实型或结构体变量的值。ANSI C标准设置了fread()和fwrite()函数来读或写数据块。
1.调用形式:
int fread(void*buffer,int size,int count,FILE*fp);
int fwrite(void*buffer,int size,int count,FILE*fp);
2.功能:
fread()是从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向后移动size*count个字节。
fwrite()是从buffer开始,一次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向后移动size*count个字节。
其中:buffer是一个指针,在fread()函数中,它表示存放输入数据的首地址;在fwrite()函数中,它表示存放输出数据的首地址。
size:表示数据块的字节数。
count:表示要读写的数据块块数。
fp:表示文件指针。
如果调用fread()或fwrite()成功,则函数返回值等于count。fread()和fwrite()函数一般用于二进制文件的处理。
例如:
fread(fa,4,5,fp);
其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。
【例10.5】从键盘输入4个学生信息,保存到student.dat文件中。
程序内容如下:
1 #include<stdio.h>
2 #define SIZE 4
3 struct student
4 {
5 char name[10];
6 int num;
7 int age;
8 char addr[15];
9 }stu[4];
10 void save()(www.xing528.com)
11 {
12 FILE*fp;
13 int i;
14 if((fp=fopen(“student.dat”,”wb”))==NULL)
15 {
16 printf(“cannot open file!”);
17 return;
18 }
19 for(i=0;i<SIZE;i++)
20 if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
21 {
22 printf(“file write error\n”);
23 return;
24 }
25 }
26 int main()
27 {
28 int i;
29 printf(“enter data:name,num,age,addrees”);
30 for(i=0;i<SIZE;i++)
31 scanf(“%s%d%d%s”,&stu[i].name,stu[i].num,stu[i].age,&stu[i].addr);
32 save();
33 }
【例题中关键问题说明】
(1)在main()函数中,从键盘输入4个学生的数据。
(2)调用save函数。将这些数据保存到以student.dat命名的磁盘文件中。fwrite函数的作用是一次将一个长度为29字节(即student结构体的长度)的数据块写到文件中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。