6-2 有结构文件的读写1 分数 10 作者 龚雄兴 单位 湖北文理学院 学生类型:ST的类型定义如下: typedef struct student{ char name[10],id[10]; int gender; int age; double scored; } ST; 编写函数,从指定的文件上读入若干字符串,每行字符串是一个学生的信息(姓名,学号,性别,年龄,分数)的字符串表示,数据间以空格分隔,将学生们的信息存储于一个结构体中,并利用output()函数输出到指定文件中。
时间: 2024-02-18 18:04:01 浏览: 86
以下是代码实现:
```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 *st, int n, char *filename){
FILE *fp;
fp = fopen(filename, "w");
if(fp == NULL){
printf("Error opening file!\n");
exit(1);
}
for(int i=0; i<n; i++){
fprintf(fp, "Name:%s ID:%s Gender:%d Age:%d Score:%.2lf\n", st[i].name, st[i].id, st[i].gender, st[i].age, st[i].scored);
}
fclose(fp);
}
int main(){
char filename[20];
printf("Please enter the input filename: ");
scanf("%s", filename);
FILE *fp;
fp = fopen(filename, "r");
if(fp == NULL){
printf("Error opening file!\n");
exit(1);
}
int n = 0;
char str[100];
while(fgets(str, 100, fp) != NULL){
n++;
}
fseek(fp, 0, SEEK_SET);
ST *st = (ST*)malloc(n*sizeof(ST));
for(int i=0; i<n; i++){
fscanf(fp, "%s %s %d %d %lf", st[i].name, st[i].id, &st[i].gender, &st[i].age, &st[i].scored);
}
fclose(fp);
printf("Please enter the output filename: ");
scanf("%s", filename);
output(st, n, filename);
free(st);
return 0;
}
```
该程序先从用户输入的文件名中读取学生信息,然后在内存中动态分配一个 `ST` 类型的结构体数组,并将学生信息存储到结构体数组中。最后,将结构体数组中的学生信息输出到用户指定的文件中。
阅读全文