使用结构数组实现学生信息数据的录入和文件的读写
时间: 2024-03-20 20:43:57 浏览: 64
好的,可以使用下面的代码实现:
```c
#include <stdio.h>
// 定义结构体
struct student {
int id;
char name[20];
int score;
};
int main() {
int n = 0; // 学生数量
printf("请输入学生数量:");
scanf("%d", &n);
struct student students[n]; // 定义结构数组
// 输入学生信息
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%d", &students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("成绩:");
scanf("%d", &students[i].score);
}
// 写入文件
FILE *fp = fopen("students.txt", "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return 0;
}
for (int i = 0; i < n; i++) {
fprintf(fp, "%d %s %d\n", students[i].id, students[i].name, students[i].score);
}
fclose(fp);
// 读取文件
fp = fopen("students.txt", "r");
if (fp == NULL) {
printf("文件打开失败!\n");
return 0;
}
printf("\n读取到的学生信息如下:\n");
for (int i = 0; i < n; i++) {
fscanf(fp, "%d%s%d", &students[i].id, students[i].name, &students[i].score);
printf("学号:%d 姓名:%s 成绩:%d\n", students[i].id, students[i].name, students[i].score);
}
fclose(fp);
return 0;
}
```
首先,我们定义了一个结构体 `student`,包括学号、姓名和成绩三个属性。然后在 `main` 函数中,首先输入学生数量,再定义一个结构数组 `students`,用来存储每个学生的信息。接着,通过循环依次输入每个学生的信息,并将其存储在对应的结构体中。
接下来,将学生信息写入文件 `students.txt` 中。我们使用 `fopen` 函数打开文件,模式为写入("w")。如果打开失败,会返回 `NULL`。然后使用 `fprintf` 函数将每个学生的信息写入文件,并在每个学生的信息之间用空格隔开。最后使用 `fclose` 函数关闭文件。
最后,我们再次打开文件 `students.txt`,模式为读取("r"),并使用 `fscanf` 函数从文件中读取每个学生的信息,并将其存储在对应的结构体中。然后将每个学生的信息打印出来即可。
注意,在输入姓名时,我们使用了 `scanf` 函数,而没有使用 `fgets` 函数。这是因为 `fgets` 函数会将回车符也读入到字符串中,导致后面的输入出现问题。而 `scanf` 函数会在读取到空格或回车时停止,因此比较方便。
阅读全文