标题:fread函数读出来有问题 求解
只看楼主
qq200258
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-10-29
结帖率:0
 问题点数:0 回复次数:6 
fread函数读出来有问题 求解

打开和写都没有问题 但是读取后 输出都是0 打开了生成的dat文件 成功写入了 就是读不出来 附上代码 虚心学习

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
struct Student{
    char num[15];   //学号
    char name[15];  //姓名
    char major[10]; //专业(computer,software,network)
    int classNo;    //班级(1-2)
    int score[3];   //3门课的成绩(0-2)
};
typedef struct Student STU;
int main()
{
    STU student[N];
    STU output = {};
    char input[20];
    int size = sizeof(STU);
    int i;
    FILE * fl;
    printf("开始录入成绩\n");
    printf("请按照 学号  姓名  专业  班级  computer成绩 software成绩 network成绩 的顺序输入,数据用空格隔开\n");
    for(i = 0;i < N;i++)
    {
        printf("请输入第%d名同学的各项信息\n",i + 1);
        /*开始录入成绩*/
        scanf("%s %s %s %d %d %d %d",student[i].num,student[i].name,student[i].major,&student[i].classNo,&student[i].score[0],&student[i].score[1],&student[i].score[2]);
    }
    printf("请输入您要保存的数据文件名:");
    scanf("%s",input);
    if((fl = fopen(input,"wb")) == NULL)
    {
        fputs("Can't open file\n",stderr);
        exit(1);
    }
    rewind(fl);
    for(i = 0;i < N;i++)
    {
        fwrite(&student[i],size,1,fl);
    }
    for(i = 0;i < N;i++)
    {
        fread(&output,size,1,fl);
        printf("%d\n",output.classNo);//测试 只读取一个整形数据
    }
    fclose(fl);
    return 0;
}
搜索更多相关主题的帖子: dat文件 
2017-05-13 16:06
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
  rewind(fl);
    for(i = 0;i < N;i++)
    {
        fwrite(&student[i],size,1,fl);
    }
    //rewind(fl);这时文件指针已经读到尾部了~要重新把指针移到头部~~~~~~~~
    for(i = 0;i < N;i++)
    {
        fread(&output,size,1,fl);
        printf("%d\n",output.classNo);//测试 只读取一个整形数据
    }

在读取数据之前加个rewind(fl)试试~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-13 17:01
qq200258
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-10-29
得分:0 
回复 2楼 九转星河
仍然没有用哦 部分可以读取 但是有些事错误的

[此贴子已经被作者于2017-5-13 18:35编辑过]

2017-05-13 18:23
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
wb模式,你不知道w模式,会删除文件的所有内容吗?

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-13 18:38
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 4楼 renkejun1942
太久没有操文件了~~那时记得储存和读取是分开的~题主这个现象其实我初学文件的时候出现过~记得有种模式是可读可改的~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-13 19:16
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:0 
wb 二进制可以写, 不可以读

早知做人那么辛苦!  当初不应该下凡
2017-05-13 19:25
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 5楼 九转星河
wb是二进制的写模式,不能读,同样也会删除文件中的内容。

wb+或 w+b说是可读写,但是这种模式会将文件的内容全部删除,所以这个读,我至今没理解。
可能指的是,写入数据之后,可以不用重新打开文件,就可以读取当前写入的数据。

[此贴子已经被作者于2017-5-13 19:36编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-13 19:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-476974-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.843436 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved