如何将文件中有效年龄的统计结果传递至另一个文件?
统计文件中整数类型有效年龄的实现方案
先梳理下你的需求:你已经有一个可以输入姓名和年龄并写入Dat.txt的程序,现在需要从这个文件里统计有效整数年龄的数量,再把统计结果输出到另一个文件中。结合你给出的代码片段,我来帮你完善这个功能:
完整实现代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #define T 50 #define A 5 // 写入姓名年龄到Dat.txt的功能(如果你的原程序没写完,可直接复用这段) void writeToFile() { FILE *ap = fopen("Dat.txt", "w"); // 用"w"会清空原有内容,要追加数据请改成"a" if (ap == NULL) { printf("无法打开Dat.txt用于写入!\n"); exit(1); } char name[T]; int age; int i; printf("请输入%d组姓名和年龄:\n", A); for (i = 0; i < A; i++) { printf("第%d组:姓名:", i+1); scanf("%s", name); printf("年龄:"); // 提前校验输入的年龄是否为有效整数,从源头保证数据有效性 while (scanf("%d", &age) != 1) { // 清除输入缓冲区的无效字符 while (getchar() != '\n'); printf("请输入有效的整数年龄:"); } // 按「姓名 年龄」的格式写入文件 fprintf(ap, "%s %d\n", name, age); } fclose(ap); printf("数据已成功写入Dat.txt!\n"); } // 统计有效整数年龄并输出到结果文件 void countValidAges() { FILE *ap = fopen("Dat.txt", "r"); FILE *ap2 = fopen("AgeCount.txt", "w"); if (ap == NULL || ap2 == NULL) { printf("无法打开目标文件!\n"); exit(1); } char line[T]; char name[T]; int age; int cont = 0; // 逐行读取文件内容 while (fgets(line, T, ap) != NULL) { // 尝试解析每行的姓名和整数年龄,返回值为2表示解析成功 if (sscanf(line, "%s %d", name, &age) == 2) { cont++; } // 解析失败的行(比如年龄不是整数)会直接跳过 } // 将统计结果写入目标文件,同时输出到控制台 fprintf(ap2, "有效整数年龄的数量为:%d\n", cont); printf("统计完成!有效整数年龄的数量为:%d\n", cont); fclose(ap); fclose(ap2); } int main() { // 若已有现成的Dat.txt,可注释掉下面一行直接执行统计 writeToFile(); countValidAges(); return 0; }
关键细节说明
- 写入时的整数校验:在写入
Dat.txt阶段,通过scanf的返回值判断输入是否为整数,避免无效数据被写入,从源头降低统计时的过滤成本 - 统计时的解析判断:用
sscanf逐行解析内容,只有成功读取到「姓名+整数年龄」的行才会被计数,自动过滤掉年龄非整数的无效条目 - 文件操作容错:每次打开文件后都会检查是否成功,避免因文件不存在或权限问题导致程序崩溃
- 灵活的文件模式:写入
Dat.txt时用"w"会清空原有内容,若需要追加新数据可改为"a";统计结果文件AgeCount.txt用"w"会覆盖旧结果,符合单次统计的需求
内容的提问来源于stack exchange,提问作者Alberto Zavala
相关产品推荐
相关产品推荐

