鱼C论坛

 找回密码
 立即注册
查看: 678|回复: 2

[已解决]feof问题

[复制链接]
发表于 2020-12-15 08:18:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//打开文件
void open(struct student *h)
{
        struct student *p=h;
        struct student *q;//临时变量,用于保存从文件中提取的信息
        FILE*file=fopen("./Information.txt","rb");
        if(!file)
        {
                printf("文件打开失败!");
                return ;
        }
       
        /*使用feof判断文件是否为结束时要注意的问题:
              当读取文件结束时,feof函数不会理解设置标识符为-1,而是
                  需要再读取一次,才会设置。所以要先读一次。
        */
       
        q=(struct student*)malloc(LEN);
        fread(q,LEN,1,file);
        while(!feof(file))//一直读到文件末尾
        {
                p->next=q;
                p=q;
                q=(struct student*)malloc(LEN);
                fread(q,LEN,1,file);
        }//while循环结束
         
        p->next=NULL;
        fclose(file);
}

谁来帮我解释下中间关于feof函数那句话啥意思,看不懂
最佳答案
2020-12-15 10:40:09
本帖最后由 jackz007 于 2020-12-15 11:09 编辑
        q=(struct student*)malloc(LEN);
        fread(q,LEN,1,file);                     // 进入循环前,先读取一个节点
        while(!feof(file))                       // 判断是否到达文件结尾,如果没有就进入或继续循环,否则,就绕过或结束循环
        {
                                                 // 代码执行到这里,说明没有到达文件结尾,本次读取的节点数据有效
                p->next=q;                       // 更新链表数据,把新的节点纳入链表
                p=q;                             // 更新链表数据,把新的节点纳入链表
                q=(struct student*)malloc(LEN);  // 分配内存,准备读取下一个节点
                fread(q,LEN,1,file);             // 读取下一个节点,执行完此句,会返回到 while 循环入口,这也是 "先读取,再判断"
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-15 08:52:34 | 显示全部楼层
字面意思呗   还能啥意思???  不先读一次  上哪去取文件指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-15 10:40:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-12-15 11:09 编辑
        q=(struct student*)malloc(LEN);
        fread(q,LEN,1,file);                     // 进入循环前,先读取一个节点
        while(!feof(file))                       // 判断是否到达文件结尾,如果没有就进入或继续循环,否则,就绕过或结束循环
        {
                                                 // 代码执行到这里,说明没有到达文件结尾,本次读取的节点数据有效
                p->next=q;                       // 更新链表数据,把新的节点纳入链表
                p=q;                             // 更新链表数据,把新的节点纳入链表
                q=(struct student*)malloc(LEN);  // 分配内存,准备读取下一个节点
                fread(q,LEN,1,file);             // 读取下一个节点,执行完此句,会返回到 while 循环入口,这也是 "先读取,再判断"
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 09:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表