有N名学生,每名学生含有如下信息:学号、姓名、某四门课的成绩,并计算其总分,用一结构体数组表示之。然后实现以下功能: (1)将这些数据存放至文件stuf.dat中; (2)将文件中的数据读出至结构体数组(或链表)中,并显示之;
时间: 2024-03-14 12:47:35 浏览: 71
好的,这是一个关于文件操作和结构体的问题。我会尽力解答。
首先,我们可以定义一个结构体来存放每个学生的信息:
```c
struct Student {
int id; // 学号
char name[20]; // 姓名
int score1; // 第一门课成绩
int score2; // 第二门课成绩
int score3; // 第三门课成绩
int score4; // 第四门课成绩
int totalScore; // 总分
};
```
然后,我们可以定义一个数组来存放多个学生的信息:
```c
struct Student students[N];
```
接下来,我们需要实现将数据存放至文件中的功能。可以使用以下代码:
```c
#include <stdio.h>
void saveToFile(struct Student students[], int n) {
FILE *fp;
fp = fopen("stuf.dat", "wb"); // 以二进制写入方式打开文件
fwrite(students, sizeof(struct Student), n, fp); // 将结构体数组写入文件
fclose(fp); // 关闭文件
}
```
这段代码将结构体数组 `students` 写入文件 `stuf.dat` 中,使用了二进制写入方式。
接下来,我们需要实现将文件中的数据读出至结构体数组中,并显示出来。可以使用以下代码:
```c
#include <stdio.h>
void readFromFile(struct Student students[], int n) {
FILE *fp;
fp = fopen("stuf.dat", "rb"); // 以二进制读取方式打开文件
fread(students, sizeof(struct Student), n, fp); // 从文件中读取结构体数组
fclose(fp); // 关闭文件
// 显示每个学生的信息
for (int i = 0; i < n; i++) {
printf("学号:%d,姓名:%s,总分:%d\n", students[i].id, students[i].name, students[i].totalScore);
}
}
```
这段代码将结构体数组从文件 `stuf.dat` 中读取出来,并显示每个学生的学号、姓名和总分。
完整代码如下:
```c
#include <stdio.h>
#define N 3
struct Student {
int id; // 学号
char name[20]; // 姓名
int score1; // 第一门课成绩
int score2; // 第二门课成绩
int score3; // 第三门课成绩
int score4; // 第四门课成绩
int totalScore; // 总分
};
void saveToFile(struct Student students[], int n) {
FILE *fp;
fp = fopen("stuf.dat", "wb"); // 以二进制写入方式打开文件
fwrite(students, sizeof(struct Student), n, fp); // 将结构体数组写入文件
fclose(fp); // 关闭文件
}
void readFromFile(struct Student students[], int n) {
FILE *fp;
fp = fopen("stuf.dat", "rb"); // 以二进制读取方式打开文件
fread(students, sizeof(struct Student), n, fp); // 从文件中读取结构体数组
fclose(fp); // 关闭文件
// 显示每个学生的信息
for (int i = 0; i < n; i++) {
printf("学号:%d,姓名:%s,总分:%d\n", students[i].id, students[i].name, students[i].totalScore);
}
}
int main() {
struct Student students[N] = {
{ 1, "Tom", 80, 90, 70, 85 },
{ 2, "Jerry", 75, 82, 90, 88 },
{ 3, "Spike", 90, 85, 80, 90 }
};
// 计算每个学生的总分
for (int i = 0; i < N; i++) {
students[i].totalScore = students[i].score1 + students[i].score2 + students[i].score3 + students[i].score4;
}
// 将数据存放至文件中
saveToFile(students, N);
// 从文件中读取数据并显示
readFromFile(students, N);
return 0;
}
```
这段代码实现了将数据存放至文件中,以及从文件中读出数据并显示的功能。
阅读全文