Turbo C环境下C程序统计文件行列数后无法正常读取数据问题求助
核心问题定位
问题与文件指针状态、文件流位置直接相关:
- 主函数为了统计文件的行数、列数,循环调用
getc(file)将文件从头到尾完整遍历读取,循环结束时文件流的位置指针已经停在文件末尾(EOF位置)。 - 代码没有对文件指针的位置做重置,直接把处于末尾位置的FILE结构体指针传给
col_1/col_2处理函数,函数内部的fscanf读取操作会直接命中EOF,无法获取文件内的有效数据。 - 代码没有校验
fscanf的返回值,因此程序运行过程中不会抛出明确报错,仅表现为读取不到有效内容。
直接修复操作
在完成行列统计、调用数据读取函数之前,添加一行代码将文件指针重置回文件起始位置:
rewind(file);
该函数会直接将当前打开的文件流的位置指针移动到文件开头,无需重新调用fopen打开文件。
附加注意事项
- 现有行列统计逻辑存在边界bug:如果文件最后一行没有附带末尾换行符,统计得到的
row值会比实际文件行数少1,会导致后续分配内存、循环读取时漏读最后一行数据,需要在统计逻辑中补充边界判断修正计数。 - 现有列数统计逻辑以第一行的逗号作为列数判断依据,但读取函数中的
fscanf是按空格分隔匹配整数;如果实际文件内是逗号分隔的双列数据,需要调整fscanf的匹配格式,兼容逗号分隔的场景,否则即使重置了文件指针,也无法正确读取数值。 - 通过
malloc动态分配的结构体数组内存,在使用完成后需要调用free释放,避免内存泄漏。
内容的提问来源于stack exchange,提问作者Prasad Tupe
相关产品推荐
相关产品推荐

