如何在C语言中用fscanf将数据文件的两列分别存入不同数组
问题解决及代码修正
首先,你的代码存在几个关键问题,导致无法实现需求:
- 变量声明语法错误:
float a[20] b[20];缺少逗号分隔,正确写法应为float a[20], b[20]; - 循环次数错误:你的数据文件只有5行,每行2个数值,循环10次会读取超出文件内容的无效数据
- 读取逻辑错误:原代码仅读取第一列数据,未处理第二列的
b数组 - 缺少文件打开成功检查:若文件不存在或无法打开,后续操作会引发错误
void main不符合C标准规范,应使用int main(void)并返回状态值
以下是修正后的完整代码:
#include <stdio.h> int main(void) { float a[20], b[20]; int i, count = 0; FILE* read = fopen("data.txt", "r"); // 检查文件是否成功打开 if (read == NULL) { printf("无法打开文件\n"); return 1; } // 每次循环读取一行的两个数值,直到文件结束 while (fscanf(read, "%f %f", &a[count], &b[count]) == 2) { count++; // 防止数组越界 if (count >= 20) { break; } } // 输出a数组(第一列数据) printf("数组a(第一列数据):\n"); for (i = 0; i < count; i++) { printf("%f\n", a[i]); } // 输出b数组(第二列数据) printf("\n数组b(第二列数据):\n"); for (i = 0; i < count; i++) { printf("%f\n", b[i]); } fclose(read); // 关闭文件 return 0; }
代码说明
- 用逗号修正了数组声明的语法错误
- 添加文件打开检查,避免空指针操作
- 使用
while循环配合fscanf的返回值(成功读取2个数值时返回2),自动处理文件中的所有有效行,无需手动指定循环次数 - 增加数组越界判断,防止数据超出数组容量
- 采用标准的
int main(void)写法,并在最后关闭文件、返回状态值 - 分别输出两个数组的内容,验证读取结果
内容的提问来源于stack exchange,提问作者AAA
相关产品推荐
相关产品推荐

