【问题标题】:Why am I having an infinite loop in this piece of code为什么我在这段代码中有一个无限循环
【发布时间】:2015-03-22 18:39:33
【问题描述】:

首先,英语不是我的主要语言,所以,请原谅任何错误。

几天前我开始学习如何在 C 中使用文件,但我的这段代码遇到了问题:

while(!feof(fp)){
    fscanf(fp, "%04d\t%s\n", &code, students[ind].disc[0].name);
    if(code == dcode) return 1;
 }

code是一个内部函数变量,dcode是要比较的课程代码,基本上该函数需要比较插入的课程代码是否存在,然后将课程名称赋给students结构的.name元素。该文件正在正确打开,并且它的结构如下:

0101    Math
0102    History

等等……

你们能帮帮我吗?

【问题讨论】:

标签: c file scanf


【解决方案1】:

当您希望单独使用fscanf 取得进展时出现无限循环的主要原因是fscanf 由于格式不匹配而无法读取任何内容。

在您的情况下,最后一行似乎没有 \n,这意味着 fscanf 永远不会匹配它。

解决此问题的一种方法是检查 fscanf 而不是 feof 的返回值(它也有自己的问题,但这是另一个主题)

while (fscanf(fp, "%04d\t%s", &code, students[ind].disc[0].name) == 2) {
    if(code == dcode) return 1;
    ind++; // You have probably forgotten about incrementing ind, right?
}

我从格式行的末尾删除了'\n' 字符,因为它无论如何都会被跳过。

【讨论】:

  • 谢谢您,这很有效,是的,我忘记了 ind 增量,感谢您的帮助
猜你喜欢
  • 2013-12-13
  • 2013-07-25
  • 2013-08-10
  • 2011-02-19
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多