学生类型: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
时间: 2024-03-21 10:38:13 浏览: 34
以下是完整的代码实现:
```
#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){
char buf[100];
while(fgets(buf, 100, fin) != NULL){
ST student;
sscanf(buf, "%s %s %d %d %lf", student.name, student.id, &student.gender, &student.age, &student.scored);
output(&student, fout);
}
}
int main(){
FILE *fin = fopen("input.txt", "r");
FILE *fout = fopen("output.txt", "w");
fun(fin, fout);
fclose(fin);
fclose(fout);
return 0;
}
```
主要思路是利用 `fgets()` 函数逐行读取文件,然后使用 `sscanf()` 函数将每行数据转换成学生信息的结构体,最后将结构体中的信息输出到指定文件中。需要注意的是,输出格式需要与 `output()` 函数中的格式一致。