在完成通信录的过程中总是多读出一个0,对此我进行了多次调试。

下面是成功的代码

void load_txl(Link *head)
{
Link temp = *head;
Link newnode = NULL;
FILE *fp;
int i;

if((fp = fopen("txl.txt","r")) == NULL)
{
printf("打开失败!\n");
exit(-1);
}

//fseek(fp,0,SEEK_END);
//len = ftell(fp);
fseek(fp,0,SEEK_SET);

/*newnode = (Link)malloc(sizeof(Txl));
fread(newnode,sizeof(Txl),1,fp);
printf("%s %s %s %d %s %s\n",newnode->num,newnode->name,newnode->sex,newnode->age,newnode->tele,newnode->addr);*/
while(!feof(fp))
{
newnode = (Link)malloc(sizeof(Txl));
   //if(fread(newnode,sizeof(Txl),1,fp) == -1)
//{
// printf("Error!\n");
// exit(-1);
//}

if(fread(newnode,sizeof(Txl),1,fp) == 0)
{
break;
}

printf("%s %s %s %d %s %s\n",newnode->num,newnode->name,newnode->sex,newnode->age,newnode->tele,newnode->addr);

//j = fscanf(fp,"%s %s %s %d %s %s\n",newnode->num,newnode->name,newnode->sex,&newnode->age,newnode->tele,newnode->addr);
temp->next = newnode;
newnode = NULL;
temp = temp->next;
}
if(feof(fp))
{
free(newnode);
newnode = NULL;
}
fclose(fp);

}

注释部分是我进行的探索,是我的思路历程,其实只要对其返回值进行判断即可。

原因就是在读完最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。feof()可以用EOF代替吗?不可以。fgetc返回-1时,有两种情况:读到文件结尾或是读取错误。因此我们无法确信文件已经结束, 因为可能是读取错误! 这时我们需要feof()。

关于feof函数多读一次的问题相关推荐

  1. PHP使用feof()函数读文件的方法

    这篇文章主要介绍了PHP使用feof()函数读文件的方法,以实例形式对比了正确与错误的用法,阐明了feof()函数的使用技巧,需要的朋友可以参考下 本文实例讲述了PHP使用feof()函数读文件的方法 ...

  2. C语言feof()函数的使用

    C语言feof()函数的使用 2009-11-24 21:55 正确的应该是feof返回0表示文件没有结束,返回1,表示结束. feof实际观察的是上次读操作的内容,也就是上次读操作fread返回的值 ...

  3. C语言中的feof函数

    函数名 feof 功 能 检测流上的文件结束符 用 法 int feof(FILE *stream); 程序例 #include <stdio.h> int main(void) { FI ...

  4. feof函数重读问题

    feof函数重读问题 fgets读到文件最后一行的时候(返回不是NULL) ,feof测试为假,再fgets一次(返回为NULL),再feof测试为真. feof是通过判断read返回错误时,才判断流 ...

  5. feof函数,fscanf函数,strtok函数等遇到的小疑惑解决办法

    feof函数,fscanf函数,strtok函数等遇到的小疑惑解决办法       近几天我等几个小菜鸟要做一个快译通软件,简单实现根据英语查汉语,本人负责将dict.txt词库中的单词调入内存哈希表 ...

  6. feof函数的正确使用

    在文件读取的过程中,feof函数经常被误用来判断文件是否结束.  但其实她是被应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件的结尾而结束 正因为如此feof函数常常与ferror函数配合 ...

  7. feof()函数以及EOF

    c 中的feof()函数,用来检测当前文件流上的文件结束标志,判断是否文件的尾部. 函数int feof(FILE *fp) 检测到文件结束符则返回一个非0值,否则返回0. Note:当文件内部的位置 ...

  8. C语言中关于feof函数fgetc函数一些理解

    C语言中关于feof函数&fgetc函数一些理解 前言 问题 解决 前言 在使用C语言来对文件操作的时候,我们经常使用一些feof.fgetc函数,但是在使用的过程中也会遇到一些小问题. 问题 ...

  9. 文件结束判定与feof函数

    文件结束判定与feof函数 目录 文件结束判定:                    方法1 :fget()函数返回EOF                    方法2 :fgets()返回NULL ...

最新文章

  1. 使用选择排序和二分查找在数组中查找数据
  2. 华为浏览器推荐关闭_用华为手机这5个功能要关掉,越早越好,不然你的手机会变的卡顿...
  3. 视频监控PPP项目投资建设和运营模式分析
  4. U3D中可以直接使用GL!!!
  5. mybatis框架中的queryWrapper的or查询,联想到MySQL中and 和or的关系
  6. ios 修复 内存泄露_iOS 内存泄漏如何解决
  7. 【POJ - 1995】Raising Modulo Numbers(裸的快速幂)
  8. 库存商品表html源码,JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统...
  9. matlab怎么画园与椭圆,[转载]【MATLAB】画圆和椭圆
  10. vyos as a firewall
  11. 各大工作室都在用的视觉特效软件,开启你的虚拟制作之旅
  12. 取消唤醒计算机需要密码怎么设置密码,Win10唤醒睡眠时需要输入密码如何取消_win10系统取消唤醒密码的方法...
  13. 电脑怎么重装系统?超简单小白一键重装教程
  14. 发布你自己的轮子 - PyPI打包上传实践
  15. 常用元器件使用方法1:DCDC降压芯片SY8303的使用方法
  16. 【XLA】一、【构图阶段】图优化器的注册和执行
  17. fmp4打包H264详解
  18. 图灵社区 : 阅读 : [讨论] Java语言被很多人抱怨语法繁琐、开发效率低、体系繁杂而笨重,为什么还有这么强的生命力,尤其是在企业软件领域?...
  19. GitLab版本管理
  20. ubuntu fceux成功运行吞食天地2中文版。

热门文章

  1. COVID-19疫情数据分析
  2. 【MaxCompute官宣】大数据计算技术共享计划 — 技术公开课第四季干货集锦!
  3. 玩机搞机-----带你了解高通刷机平台中的一些选项释义 玩转平台
  4. 基于亚马逊云科技 Serverless架构的实时数仓架构
  5. NBA十大不可能破的记录
  6. BOOL ModifyStyleEx( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 );
  7. mysql int转String 及 将String转为Double类型
  8. ChatGPT,生成式AI在全球都有哪些场景和应用?
  9. 基于mediapipe的姿态识别和简单行为识别
  10. 初中计算机课堂游戏设计,19届中小学电脑制作活动精选课件:创意环保设计