6-3 有结构文件的读写1 分数 20 作者 龚雄兴 单位 湖北文理学院 学生类型: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 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
时间: 2024-03-17 22:47:48 浏览: 68
根据题意,我们需要实现一个函数 `fun`,该函数的功能是从指定的文件中读取若干字符串,每行字符串是一个学生的信息(姓名,学号,性别,年龄,分数)的字符串表示,数据间以空格分隔,将学生们的信息存储于一个结构体中,并利用 `output()` 函数输出到指定文件中。
下面是一个实现该功能的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.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 line[100];
while(fgets(line, 100, fin) != NULL){
ST *s = (ST*)malloc(sizeof(ST));
sscanf(line, "%s %s %d %d %lf", s->name, s->id, &s->gender, &s->age, &s->scored);
output(s, fout);
free(s);
}
}
int main(){
FILE *fin = fopen("input.txt", "r");
FILE *fout = fopen("output.txt", "w");
fun(fin, fout);
fclose(fin);
fclose(fout);
return 0;
}
```
在上面的代码中,我们首先定义了一个 `ST` 结构体,代表学生的信息,然后定义了 `output()` 函数,用于将学生信息输出到指定文件中。
在 `fun()` 函数中,我们首先定义一个字符数组 `line`,用于存储每一行的字符串。然后使用 `fgets()` 函数从文件中读取每一行字符串,如果文件已经读取到了末尾,`fgets()` 会返回 `NULL`,这时候我们就可以结束读取。
对于每一行字符串,我们使用 `sscanf()` 函数将其转换成对应的 `ST` 结构体,然后利用 `output()` 函数将其输出到指定文件中。
最后,在 `main()` 函数中,我们打开了输入文件和输出文件,调用 `fun()` 函数完成了任务,然后关闭了文件。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)