C语言如何读取txt文件第二行及之后的数字并存入数组
C语言读取txt第二行及以后数字存入数组实现方案
你已经通过首次fscanf完成了第一行两个整数的读取,此时文件指针已经自动移动到第一行末尾,后续直接循环读取整数即可,不需要额外做行跳转操作。注意不要固定循环MAX次,必须根据读取返回值判断文件状态,避免读入无效数据或数组越界。
核心修改点
- 补充缺失的头文件
#include <stdio.h>,否则文件操作、打印相关函数会触发编译错误 - 新增
actualCount变量记录实际读取到的有效数字个数,不要硬编码MAX作为有效数据长度 - 循环读取时判断
fscanf返回值:成功匹配到1个整数时存入数组,计数+1;遇到文件尾或格式错误时直接跳出循环,最多读取MAX个防止数组越界 - 原代码首次
fscanf末尾的\n无实际作用,fscanf会自动跳过换行、空格等所有空白符,可直接删除 - 原变量名
listOfNumers存在拼写错误,修正为listOfNumbers,不修正也可正常运行但可读性差
完整修正后代码
#define MAX 50 #include <stdio.h> int main (void){ FILE *file; int primNum; int secNum; int listOfNumbers[50]; int actualCount = 0; int i = 0; file = fopen("file.txt", "rt"); if (file == NULL) { printf("Open file error\n"); return 1; } // 读取第一行两个参数 fscanf(file, "%d %d", &primNum, &secNum); printf("1st Number: %d\n", primNum); printf("2nd Number: %d\n", secNum); printf("List of Numbers:\n"); // 读取第二行及以后的数字 for(i = 0; i < MAX; i++){ int readRet = fscanf(file, "%d", &listOfNumbers[i]); if (readRet != 1) { break; } actualCount++; } // 打印所有读取到的数字 for(i = 0; i < actualCount; i++){ printf("%d\n", listOfNumbers[i]); } fclose(file); return 0; }
运行效果(匹配提供的txt示例)
1st Number: 10 2nd Number: 20 List of Numbers: 45000000 48000000 56000000
补充说明:示例中第二行起最大数字为56000000,在4字节int的可存储范围内(最大支持2147483647),如果后续需要读取更大的数值,可将数组类型替换为
long或long long。
内容的提问来源于stack exchange,提问作者LearningLinux
相关产品推荐
相关产品推荐

