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

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

平均成绩: 51.666667


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值