学生类型:ST的类型定义如下:
typedef struct student{ char name[10],id[10]; int gender; int age; double scored; } ST; 编写函数,从指定的文件上读入若干字符串,每行字符串是一个学生的信息(姓名,学号,性别,年龄,分数)的字符串表示,数据间以空格
分隔,将学生们的信息存储于一个结构体中,并利用output()函数输出到指定文件中。
函数接口定义:
void fun(FILE *fin,FILE *fout);
其中 fin
和 fout
都是用户传入的参数。 前者是已正常打开的可读文件,而后者是已正常打开的可写文件。
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如: #include <stdio.h> #include <stdlib.h> typedef struct student{ char name[10],id[10]; int gender; int age; double scored; } ST; void output(ST *d,FILE *fout){//测试程序,输出到文件调用此函数完成 if(d==NULL) {printf("null\n");return;} fprintf(fout,"%s,%s,%d,%d,%4.2f\n",d->name,d->id,d->gender,d->age,d->scored); } void fun(FILE *fin,FILE *fout);//<--需要完成的函数(包括读入字符串,转换成对应的结构体,并利用函数(output())输出到指定文件中,输入输出文件不用考虑 /* 请在这里填写答案 */
输入样例:
从固定文件中读取:文件内容:
aaa 123 0 18 88.88
bbb 456 1 19 99.99
ccc 789 1 18 66.66
ddd 356 0 18 67.89
输出样例:
输出到指定文件中,文件内容:
aaa,123,0,18,88.88
bbb,456,1,19,99.99
ccc,789,1,18,66.66
ddd,356,0,18,67.89
提供三种代码 大同小异
void fun(FILE *fin,FILE *fout)
{
ST s[20];
int i=0;
while( (fscanf(fin,"%s%s%d%d%lf",s[i].name,s[i].id,&s[i].gender,&s[i].age,&s[i].scored))!=EOF)
{
output(&s[i],fout);
i++;
}
}
void fun(FILE *fin,FILE *fout)
{
ST *p=(ST *)malloc(sizeof(ST));
while( (fscanf(fin,"%s%s%d%d%lf",p->name,p->id,&p->gender,&p->age,&p->scored))!=EOF)
{
output(p,fout);
p=(ST *)malloc(sizeof(ST));
}
}
void fun(FILE *fin,FILE *fout)
{
while(feof(fin)==0)
{
ST *p=(ST *)malloc(sizeof(ST));
if((fscanf(fin,"%s%s%d%d%lf",p->name,p->id,&p->gender,&p->age,&p->scored))!=EOF)
output(p,fout);
}
}