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

如何将文件中有效年龄的统计结果传递至另一个文件?

统计文件中整数类型有效年龄的实现方案

先梳理下你的需求:你已经有一个可以输入姓名和年龄并写入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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:15:39