如何在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
相关产品推荐
相关产品推荐

