如何从TXT文件提取国名并将奖牌数据分别存入二维数组?
问题描述
需要从如下格式的文本文件中,分别提取并存储国家名称和对应的三列奖牌数据(对应每一行的第1、2、3个数字):
文本文件内容:
Australia 67 57 54 England 57 66 53 Canada 26 32 34 India 22 16 23 NewZealand 20 12 17 Scotland 13 11 27 Nigeria 12 9 14 Wales 8 6 14 SAfrica 7 9 11 Uganda 3 0 2 Samoa 1 4 0 BVIslands 2 0 0 Ghana 0 2 3 Namibia 0 0 4 Dominica 0 2 0
当前代码仅读取整行内容到countryNames数组,未分离出奖牌数据,还存在重复关闭文件的错误,需修改代码实现需求。
修改后的代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #define COUNTRIES 15 #define MEDALCAT 3 #define MAX_LENGTH_CNAME 100 void readFromFile(char fileWithMedals[30], int country[COUNTRIES][MEDALCAT], char countryNames[COUNTRIES][MAX_LENGTH_CNAME]) { // 使用传入的文件名,避免硬编码 FILE *cWealth = fopen(fileWithMedals, "r"); if (cWealth == NULL) { printf("错误:无法打开文件!"); exit(1); } int line = 0; char buffer[MAX_LENGTH_CNAME + 20]; // 预留足够空间存储整行内容 // 逐行读取并解析数据 while (line < COUNTRIES && fgets(buffer, sizeof(buffer), cWealth) != NULL) { // 格式化解析:提取国名和三个奖牌数字 if (sscanf(buffer, "%s %d %d %d", countryNames[line], &country[line][0], &country[line][1], &country[line][2]) == 4) { line++; } } fclose(cWealth); // 验证读取结果 printf("读取完成,数据如下:\n"); for (int i = 0; i < line; i++) { printf("%-12s 第1列:%d 第2列:%d 第3列:%d\n", countryNames[i], country[i][0], country[i][1], country[i][2]); } } // 示例主函数 int main() { int medalData[COUNTRIES][MEDALCAT]; char countryNames[COUNTRIES][MAX_LENGTH_CNAME]; readFromFile("commonWealth.txt", medalData, countryNames); return 0; }
关键修改说明
- 灵活使用文件名:把原代码硬编码的文件名改为函数参数,适配不同文件路径。
- 格式化解析数据:用
sscanf一次性拆分每行内容,将国名存入字符串数组,三个数字分别存入二维数组对应位置。 - 修复文件操作错误:删除重复的
fclose调用,仅在文件操作完成后关闭一次。 - 防越界处理:循环中加入
line < COUNTRIES判断,避免数组溢出。 - 验证输出:添加测试打印,确认数据读取正确。
内容的提问来源于stack exchange,提问作者Yuvan
相关产品推荐
相关产品推荐

