一、定义学生结构体
- 学生信息:学号,姓名,成绩等
- 编写2个函数 save_stu 和 load_stu save_stu
- 通过 fprintf 将arr数组中的3个学生的所有信息,保存到文件中去 load_stu
- 通过 fscanf 将文件中的3个学生的所有信息,读取到一个新的结构体数组中,并输出所有学生的信息
#include <stdio.h>
#include <stdlib.h> // 学生结构体
typedef struct Student
{ int id; char name[20]; double chinese; // 语文成绩 double math; double english; double physical; double chemical; double biological;
} stu_t; // 函数声明
void save_stu(stu_t arr[], int size);
void load_stu(stu_t arr[], stu_t *brr, int size); int main(int argc, const char *argv[])
{ stu_t arr[3] = { {101, "小张", 99, 88, 87, 90, 89, 77}, {102, "小杨", 88, 90, 78, 69, 90, 89}, {103, "小李", 97, 89, 78, 80, 78, 86} }; save_stu(arr, 3); stu_t brr[3]; // 定义新数组brr,用于存储的学生数据 load_stu(arr, brr, 3); // 注意传递brr的地址和大小 // 打印加载的数据以验证 for (int i = 0; i < 3; i++){ printf("学号:%d 姓名:%s 语文:%.2lf 数学:%.2lf 英语:%.2lf 物理:%.2lf 化学:%.2lf 生物:%.2lf\n", brr[i].id, brr[i].name, brr[i].chinese, brr[i].math, brr[i].english, brr[i].physical, brr[i].chemical, brr[i].biological); } return 0;
} //保存数组信息到文件f1中
void save_stu(stu_t arr[], int size)
{ FILE *f1 = fopen("3.txt", "a"); // 创建文件,使用追加模式 aif (f1 == NULL){ perror("打开文件失败"); return; } for (int i = 0; i < size; i++) //将数组arr的信息保存到文件中{ fprintf(f1, "学号:%d 姓名:%s 语文:%.2lf 数学:%.2lf 英语:%.2lf 物理:%.2lf 化学:%.2lf 生物:%.2lf\n", arr[i].id, arr[i].name, arr[i].chinese, arr[i].math, arr[i].english, arr[i].physical, arr[i].chemical, arr[i].biological); } fclose(f1); // 关闭文件
} //将文件的信息读取到新数组内
void load_stu(stu_t arr[], stu_t brr[], int size)
{ FILE *f1 = fopen("3.txt", "r"); if (f1 == NULL) { perror("打开文件失败"); return; } for (int i = 0; i < size && !feof(f1); i++){ fscanf(f1, "学号:%d\t 姓名:%s\t 语文:%lf\t 数学:%lf\t 英语:%lf\t 物理:%lf\t 化学:%lf\t 生物:%lf\n", &brr[i].id, brr[i].name, &brr[i].chinese, &brr[i].math, &brr[i].english, &brr[i].physical, &brr[i].chemical, &brr[i].biological); } fclose(f1);
}