C 语言中的fread 和fwrite 一般是成对出现的,它们一般用来读写一个字符,也可以用来读写一个字符串,还可以用来读取一组数据.
用法:
fread(指向数据的指针,数据块的大小,要读取的数据块数目,文件指针)
e.g:
fread(rp,size,n,fp)
如果读取成功,返回值应该为n
rp指的是要读取的数据的首地址,
size 是要读取的数据块的(字节数)大小,
n表示要读取的数据块数目,
fp指的是指向要读取的文件的指针
用法:
fwrite(指向数据的指针,数据块大小,要写入的数据块数目,文件指针)
e.g:
fwrite(wp,size,n,fp)
wp指的是要写的数据首地址,其他参数如fread参数
代码:
/* fread() 和 fwrite() 用法*/
#include<stdio.h>
#include<stdlib.h>
struct student
{
char num[6];
char name[8];
int score[3];
double avr;
}stu[3];
int main()
{
int i,j,sum;
FILE *fp;
for(i=0;i<3;i++)
{
printf("请输入第%d个学生个人信息:\n",i+1);
printf("学号: ");
scanf("%s",stu[i].num);
printf("姓名: ");
scanf("%s",stu[i].name);
sum=0;
for(j=0;j<3;j++)
{
printf("请输入第%d门课的分数:",j+1);
scanf("%d",&stu[i].score[j]);
sum+=stu[i].score[j];
}
stu[i].avr=sum/3.0;
printf("品均分数: %f",stu[i].avr);
}
fp=fopen("TEXT.txt","w");
for(i=0;i<3;i++)
{
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("写入错误\n");
}
fclose(fp);
/* 读取 */
fp=fopen("TEXT.txt","r");
if(fp==NULL)
{
printf("文件打开失败!");
exit(1);
}
printf("读取数据如下:\n");
for(i=0;i<3;i++)
{
printf("读取第%d个学生信息如下:\n",i+1);
if(fread(&stu[i],sizeof(struct student),1,fp)!=1)
printf("读取失败!");
printf("学号: %s\n",stu[i].num);
printf("姓名: %s\n",stu[i].name);
for(j=0;j<3;j++)
{
printf("第%d门成绩: %d\n",j+1,stu[i].score[j]);
}
printf("平均成绩: %f\n",stu[i].avr);
printf("-------------------\n");
}
fclose(fp);
return 0;
}
结果:
请输入第1个学生个人信息:
学号: 123
姓名: kas
请输入第1门课的分数:12
请输入第2门课的分数:32
请输入第3门课的分数:45
品均分数: 29.666667请输入第2个学生个人信息:
学号: 222
姓名: des
请输入第1门课的分数:22
请输入第2门课的分数:44
请输入第3门课的分数:22
品均分数: 29.333333请输入第3个学生个人信息:
学号: 564
姓名: light
请输入第1门课的分数:32
请输入第2门课的分数:45
请输入第3门课的分数:78
品均分数: 51.666667读取数据如下:
读取第1个学生信息如下:
学号: 123
姓名: kas
第1门成绩: 12
第2门成绩: 32
第3门成绩: 45
平均成绩: 29.666667
读取第2个学生信息如下:
学号: 222
姓名: des
第1门成绩: 22
第2门成绩: 44
第3门成绩: 22
平均成绩: 29.333333
读取第3个学生信息如下:
学号: 564
姓名: light
第1门成绩: 32
第2门成绩: 45
第3门成绩: 78