C 语言中fread()和fwrite()用法

来源:互联网 发布:软件系统 架构 编辑:程序博客网 时间:2024/05/17 06:11

C 语言中的fread 和fwrite 一般是成对出现的,它们一般用来读写一个字符,也可以用来读写一个字符串,还可以用来读取一组数据.


用法:
fread(指向数据的指针,数据块的大小,要读取的数据块数目,文件指针)
e.g:

fread(rp,size,n,fp)如果读取成功,返回值应该为nrp指的是要读取的数据的首地址,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

平均成绩: 51.666667


0 0
原创粉丝点击