为什么我在这段代码中有一个无限循环

时间:2015-03-22 18:39:34

标签: c file scanf

在此之前,英语不是我的主要语言,所以请原谅任何错误。

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

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

编码它是一个内部函数变量,而dcode是比较的课程代码,基本上,如果课程代码不存在,函数需要比较,然后将课程名称分配给.name元素。学生结构。文件正确打开,并以这种方式构建:

0101    Math
0102    History

等......

你能帮助我吗?

1 个答案:

答案 0 :(得分: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'字符,因为无论如何都会跳过它。

相关问题