Arrays 我的代码没有正确地将数据打印到文件中

Arrays 我的代码没有正确地将数据打印到文件中,arrays,c,data-structures,file-io,Arrays,C,Data Structures,File Io,我正在写一个C代码,它将从包含以下数据的文本文件中读取数据:姓名、年龄、收入 成功读取数据后,数据将分为两个不同的文件: 在第一个项目中所有年龄低于平均年龄的项目 第二个所有收入高于平均水平的条目 但是,我的代码只将最后的数据打印到这两个文件中。我不知道我的代码出了什么问题 我的代码 #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct { char na

我正在写一个C代码,它将从包含以下数据的文本文件中读取数据:姓名、年龄、收入

成功读取数据后,数据将分为两个不同的文件: 在第一个项目中所有年龄低于平均年龄的项目 第二个所有收入高于平均水平的条目

但是,我的代码只将最后的数据打印到这两个文件中。我不知道我的代码出了什么问题

我的代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct 
{
    char name[15];
    int age;
    float income;
} data;

void input(FILE*, data*);
void output1(FILE*, data*);
void output2(FILE* file2, data* data);

int main(void) {
        data p;
        data *place = &p;
        char fileR[10] = "F1.txt", file1W[10] = "F2.txt", file2W[10] = "F3.txt";
        float ave_income = 0, sum_income = 0; 
        int ave_age = 0, sum_age = 0, count = 0;
        
        FILE *fi, *fo1, *fo2;
        fi = fopen(fileR, "r");
        fo1 = fopen(file1W, "w");
        fo2 = fopen(file2W, "w");
        
        do{
            input(fi, place);
            sum_age+=p.age;
            ++count;        
            
        }while(fgetc(fi)!=EOF);
        
        ave_age = sum_age/count;
        
        
        do{
            if (p.age < ave_age) 
            {   
                output1(fo1, place);
            }       
            else
            {
                continue;
            }
        }while(fgetc(fi)!=EOF);
        
        do{
            input(fi, place);
            sum_income+=p.income;       
            
        }while(fgetc(fi)!=EOF);
        
        ave_income = sum_income/count;
        
        
        do{
            if (p.income > ave_income) 
            {   
                output2(fo2, place);
            }       
            else
            {
                continue;
            }
        }while(fgetc(fi)!=EOF);
    
fclose(fi);
fclose(fo1);    
fclose(fo2);

return 0; 
}
        
void input(FILE* f, data* data)
{
    fscanf(f, "%s %d %f", data->name,&data->age,&data->income);
}
     
void output1(FILE* file, data* data)
{
    
    fprintf(file, "Name %s \nAge: %d\nWind Income: %f \n", data->name, data->age, data->income ); //prints to the file
    printf("Name %s \nAge: %d\nIncome: %f \n",data->name, data->age, data->income); //prints
}

void output2(FILE* file2, data* data)
{
    
    fprintf(file2, "Name %s \nAge: %d\nWind Income: %f \n", data->name, data->age, data->income ); //prints to the file
    printf("Name %s \nAge: %d\nIncome: %f \n",data->name, data->age, data->income); //prints
}
Alex    25  670
John    24  830
Jessica 31  800
Milana  27  680
Kaarel  28  1200
Triin   34  1300
Maria   29  1450
Jaanus  28  1350
Maaris  26  1100

在第一个循环读取所有输入后,后面的循环重复相同的EOF检查,而不是使用
count
。您的意思是,在第一个循环后,我应该使用“count”而不是使用EOF您是否尝试在调试器中逐行运行代码,同时监视所有变量的值,为了确定程序在哪一点停止了预期的行为?如果未尝试此操作,则可能需要阅读此内容:您可能还需要阅读此内容:。您是否考虑过使用struct数组来读取输入文件中的所有数据?这样您就可以存储所有数据,并且不需要读取输入文件两次。对于少量的输入,它不会产生很大的差异,但是如果您有一百万行输入,您就不需要多次读取输入。1)这是在
input
函数中,您应该从
stdin
读取,而不是
fp
fscanf(f),%s%d%f”,数据->姓名和数据->年龄和数据->收入)==>
fscanf(标准输入,“%s%d%f”,数据->姓名和数据->年龄和数据->收入)2)您读取
do while(fgetc(fi)!=EOF)
中内容的方式是错误的3)您必须使用结构数组(或带有指向结构的指针)来存储详细信息