为什么我在这段代码中有一个无限循环
Why am I having an infinite loop in this piece of code
首先,英语不是我的主要语言,所以请原谅任何错误。
几天前我开始学习如何在 C 中使用文件,但我的这段代码遇到了问题:
while(!feof(fp)){
fscanf(fp, "%04d\t%s\n", &code, students[ind].disc[0].name);
if(code == dcode) return 1;
}
code是一个函数内部变量,dcode是要比较的课程代码,基本上,函数需要比较插入的课程代码是否存在,然后将课程名称分配给学生结构的.name元素.文件打开正确,其结构如下:
0101 Math
0102 History
等等...
你们能帮帮我吗?
当您希望单独使用 fscanf
取得进展时出现无限循环的主要原因是 fscanf
由于格式不匹配而无法读取任何内容。
在你的情况下,最后一行似乎没有 \n
,这意味着 fscanf
永远不会匹配它。
解决此问题的一种方法是检查 fscanf
的 return 值而不是 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 中使用文件,但我的这段代码遇到了问题:
while(!feof(fp)){
fscanf(fp, "%04d\t%s\n", &code, students[ind].disc[0].name);
if(code == dcode) return 1;
}
code是一个函数内部变量,dcode是要比较的课程代码,基本上,函数需要比较插入的课程代码是否存在,然后将课程名称分配给学生结构的.name元素.文件打开正确,其结构如下:
0101 Math
0102 History
等等...
你们能帮帮我吗?
当您希望单独使用 fscanf
取得进展时出现无限循环的主要原因是 fscanf
由于格式不匹配而无法读取任何内容。
在你的情况下,最后一行似乎没有 \n
,这意味着 fscanf
永远不会匹配它。
解决此问题的一种方法是检查 fscanf
的 return 值而不是 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'
个字符,因为它无论如何都会被跳过。