You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:55:18