C语言代码读取文件错误分析及解决方法
这段代码存在一个常见错误:在 while 循环中,先读取了一组数据再判断文件是否结束,所以会多读取一次数据,导致最后一个数据被读取两次。
解决方法是先判断文件是否结束再进行读取操作。将 fscanf 语句移到 while 循环的条件判断语句之后,避免在文件末尾时多读取一次数据。
此外,还应该添加对打开文件是否成功的判断。如果文件打开失败,应该给出相应的错误提示并结束程序。
以下是对代码的优化建议:
int readFile(struct con con[]) {
int i = 0;
FILE *fl;
fl = fopen('test.txt', 'r');
if (fl != NULL) {
while (!feof(fl)) {
fscanf(fl, '%s %c %s%s%d-%d-%d', con[i].name, &con[i].sex, con[i].add, con[i].tel, &con[i].birth.year, &con[i].birth.month, &con[i].birth.day);
i++;
}
fclose(fl);
} else {
printf('打开文件失败!\n');
}
return i;
}
优化后的代码
- 将
fscanf语句移动到while循环的条件判断语句之后,避免在文件末尾时多读取一次数据。 - 添加对打开文件是否成功的判断,如果文件打开失败,给出错误提示并结束程序。
通过这些改进,代码能够更加安全可靠地读取文件内容,避免错误发生。
原文地址: https://www.cveoy.top/t/topic/n46L 著作权归作者所有。请勿转载和采集!