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

标签 c file scanf

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

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

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

code是一个函数内部变量,dcode是要比较的类(class)代码,基本上,该函数需要比较插入的类(class)代码是否存在,然后将类(class)名称分配给学生结构的.name元素。文件打开正确,其结构如下:

0101    Math
0102    History

等等...

你们能帮帮我吗?

最佳答案

当您希望单独使用 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' 字符,因为它无论如何都会被跳过。

关于c - 为什么我在这段代码中有一个无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29198286/

相关文章:

c - 如何使用 C 在 fclose() 之后移动文件

c - 如何在不修改程序的情况下从 stdout 捕获无缓冲的输出?

c - 如何使 sscanf 强制特定格式?

c - 如何修复 fscanf() 的错误,在 C 中检查矩阵中的元素是否为整数

c - 无限循环条件变量是否应该始终声明为 volatile?

c - Netlink 套接字创建返回 NULL

java - 如何读取大文件并在最后释放内存?

C - scanf 被跳过(即使是 "%d")

algorithm - Intel hex 文件中任意大小的填充模式

android - 如何在android中获取视频文件的缩略图