Arrays 我的代码没有正确地将数据打印到文件中
我正在写一个C代码,它将从包含以下数据的文本文件中读取数据:姓名、年龄、收入 成功读取数据后,数据将分为两个不同的文件: 在第一个项目中所有年龄低于平均年龄的项目 第二个所有收入高于平均水平的条目 但是,我的代码只将最后的数据打印到这两个文件中。我不知道我的代码出了什么问题 我的代码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
#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)您必须使用结构数组(或带有指向结构的指针)来存储详细信息