标题:自教务管理系统中的问题求教
只看楼主
廉价的咖啡
Rank: 2
来 自:湖北 荆门
等 级:论坛游民
威 望:2
帖 子:53
专家分:17
注 册:2014-10-9
结帖率:72.73%
已结贴  问题点数:20 回复次数:9 
自教务管理系统中的问题求教
for(count=0;fread(&p_student[count].student,sizeof(struct studentinfo),1,infofile)==1;count++)
    {
        continue;
    }

各位朋友,这是什么意思,大概明白,求详解,谢谢各位了
搜索更多相关主题的帖子: 朋友 count 管理系统 continue 
2016-07-10 19:26
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:20 
fread(&p_student[count].student,sizeof(struct studentinfo),1,infofile)==1  如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
&p_student[count].student  接收数据的内存地址
sizeof(struct studentinfo) 待读取数据项的字节
1                          要读几个数据项,每个数据项sizeof个字节.
infofile(FILE类型)       输入流(文件指针)
2016-07-10 21:15
廉价的咖啡
Rank: 2
来 自:湖北 荆门
等 级:论坛游民
威 望:2
帖 子:53
专家分:17
注 册:2014-10-9
得分:0 
回复 2楼 linlulu001
恩恩  谢谢你的帮助,你的解释我明白了fread函数的用法了
 还有就是想问问  在这个for循环中 里面只有countinue;对于这个fread函数来说是什么意思呢

就在这一刻,你的对手依旧不停的翻动书页。
2016-07-11 11:05
廉价的咖啡
Rank: 2
来 自:湖北 荆门
等 级:论坛游民
威 望:2
帖 子:53
专家分:17
注 册:2014-10-9
得分:0 
回复 2楼 linlulu001
为了便于你的理解 这是“我的修改个人信息操作文件”函数模块

int datfile(struct allstudentinfo *p_student)
{
    int count;

    system("cls");


    if((infofile=fopen(filename,"rb"))==NULL)                                            
    {
        printf(" 不能打开文件,请确认磁盘是否已满或者文件是否存在!");
        getch();
        exit(1);
    }
//rewind的函数就是把文件指针从你现在读取的位置,重新回到文件开头
    rewind(infofile);                                            //指向文件头读取数据

    for(count=0;fread(&p_student[count].student,sizeof(struct studentinfo),1,infofile)==1;count++)
    {
        continue;
    }
    fclose(infofile);

    return count;                                                //返回读到的结构块数
}

就在这一刻,你的对手依旧不停的翻动书页。
2016-07-11 11:10
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
你用一个分号“;”代码countinue;也行。
个人感觉用countinue;可读性更好些。
2016-07-11 12:10
廉价的咖啡
Rank: 2
来 自:湖北 荆门
等 级:论坛游民
威 望:2
帖 子:53
专家分:17
注 册:2014-10-9
得分:0 
回复 5楼 linlulu001
for(count=0;fread(&p_student[count].student,sizeof(struct studentinfo),1,infofile)==1;count++)
    {
        continue;
    }
加上你之前的解释,我对这句话的理解是:这其实是在将infofile文件中所有的student数据一次次的读在p_student[count].student上,同时用count在conutinue的作用下进行累加,也就是计数(关于student的个数),
你觉得是这个意思吗?

就在这一刻,你的对手依旧不停的翻动书页。
2016-07-11 18:12
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
对conut进行统计和作为结构体数组的下标使用。
p_student[count].student  从这句看应该是结构体数组,估计不是链表。


按说你应该理解fread的用法,这句for要表达的也是让count统计读取多少次数据(struct studentinfo)的功能。如果代码都对的情况下得到的结果就是你想要的
但是fread(&p_student[count].student,sizeof(struct studentinfo),1,infofile)这句中有一个参数是错的,那整个for循环就是一个摆设,
如果count是0,1、infofile文件是空
              2、&p_student[count].student,sizeof(struct studentinfo)这两个中的一个错或者两个都错。
                 毕竟1,infofile一个是循环一次读取元素的次数,一个是文件指针,这两个想来应该是没什么问题。

[此贴子已经被作者于2016-7-11 20:51编辑过]

2016-07-11 19:34
平常心q
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:120
专家分:550
注 册:2016-3-31
得分:0 
fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,
如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。

函数原型: size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;

参 数:
buffer:用于接收数据的内存地址
size:要读的每个数据项的字节数,单位是字节
count:要读count个数据项,每个数据项size个字节.
stream:输入流

返回值:实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。 
2016-07-11 19:52
廉价的咖啡
Rank: 2
来 自:湖北 荆门
等 级:论坛游民
威 望:2
帖 子:53
专家分:17
注 册:2014-10-9
得分:0 
回复 8楼 平常心q
谢谢你的帮助

就在这一刻,你的对手依旧不停的翻动书页。
2016-07-12 09:57
廉价的咖啡
Rank: 2
来 自:湖北 荆门
等 级:论坛游民
威 望:2
帖 子:53
专家分:17
注 册:2014-10-9
得分:0 
回复 7楼 linlulu001
恩恩,看了即便你的回复消息,谢谢你的指点

就在这一刻,你的对手依旧不停的翻动书页。
2016-07-12 09:57



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




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

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