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

如何在C语言中使用fscanf从文件读取数据存入一维数组

问题分析
  • 你当前只调用了1次fscanf,仅能给数组的第一个元素赋值,剩余39999个元素都是未初始化的栈内存垃圾值,输出结果自然不符合预期
  • 缺少文件打开成功性判断,若文件路径错误、文件不存在,fopen会返回空指针,直接操作会导致程序崩溃
  • float类型的精度不足以匹配你输入的双精度科学计数法格式数值,容易出现精度丢失
  • 打印时没有加分隔符,所有输出内容会挤在一起,无法区分每个数值
  • 缺少必要的头文件引用,且操作完文件后没有主动关闭资源
修正后的代码
#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE* pixel = fopen("/Users/xy/sample.txt", "r");
    // 先判断文件是否正常打开
    if (pixel == NULL) {
        printf("文件打开失败,请检查路径是否正确\n");
        return 1;
    }

    // 改用double存储匹配输入的双精度科学计数法格式,避免精度丢失
    double arr[40000];
    // 循环读取40000个数值,每次写入对应下标的数组元素
    for (int i = 0; i < 40000; i++) {
        fscanf(pixel, "%lf", &arr[i]);
    }

    // 打印时加空格分隔每个数值
    for(int i = 0; i < 40000; i++) {
        printf("%f ", arr[i]);
    }

    // 关闭文件释放资源
    fclose(pixel);
    return 0;
}
额外说明
  • fscanf默认会自动跳过空格、换行等空白分隔符,不需要额外处理分隔逻辑,循环读取指定次数即可
  • 如果需要增加容错能力,可以判断fscanf的返回值,读取成功时会返回1,返回值小于1则说明读到文件末尾或输入格式不匹配

内容的提问来源于stack exchange,提问作者Manuel Huber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:05