2,新建一个文件文档,现在学生信,息 20 人(已包含前面学生结构体中的信息),要求利用文件指针去实现从键盘输入学生信息,在原有文件后加入 10 个学生信
#include <stdio.h>
#include <stdlib.h>
#define MAX_NAME_LENGTH 50
#define MAX_STUDENTS 30
struct Student {
char name[MAX_NAME_LENGTH];
int age;
float score;
};
int main() {
FILE *fp;
struct Student students[MAX_STUDENTS];
int num_students = 0;
// 打开文件,将原有文件内容读入内存变量中
fp = fopen("students.txt", "r+");
if (fp == NULL) {
printf("无法打开文件!\n");
exit(1);
}
// 从文件读取已有学生信息
while (fscanf(fp, "%s %d %f", students[num_students].name, &students[num_students].age, &students[num_students].score) != EOF) {
num_students++;
}
// 从键盘输入新学生信息
printf("请输入 10 个新学生的信息(姓名 年龄 分数):\n");
for (int i = 0; i < 10; i++) {
scanf("%s %d %f", students[num_students].name, &students[num_students].age, &students[num_students].score);
num_students++;
}
// 将内存中的所有学生信息写回到文件中
rewind(fp);
for (int i = 0; i < num_students; i++) {
fprintf(fp, "%s %d %f\n", students[i].name, students[i].age, students[i].score);
}
// 关闭文件
fclose(fp);
printf("操作完成!\n");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENT_NUM 30
struct student {
char name[20];
int age;
char gender[10];
};
int main() {
FILE *fp;
struct student students[MAX_STUDENT_NUM];
int i, num;
// 从文件中读取已有学生信息
fp = fopen("students.txt", "r");
if (fp == NULL) {
printf("File open error!\n");
exit(1);
}
num = 0;
while (fscanf(fp, "%s %d %s", students[num].name, &students[num].age, students[num].gender) != EOF) {
num++;
}
fclose(fp);
// 从键盘输入新学生信息
for (i = num; i < num + 10; i++) {
printf("Please input student %d's name, age and gender: ", i+1);
scanf("%s %d %s", students[i].name, &students[i].age, students[i].gender);
}
// 将所有学生信息写入文件
fp = fopen("students.txt", "w");
if (fp == NULL) {
printf("File open error!\n");
exit(1);
}
for (i = 0; i < num + 10; i++) {
fprintf(fp, "%s %d %s\n", students[i].name, students[i].age, students[i].gender);
}
fclose(fp);
printf("All student information has been saved to the file.\n");
return 0;
}
//创建学生信息
void CreatInfo(int *n_, struct student Stu[]){ //将主函数中存储的学生人数与结构体地址传入函数
int number,scored;
char name[20];
printf("请按顺序输入%d个学生的信息:(学号_姓名_成绩)\n",*n_);
for (int i = 0; i < *n_; i++)
{
scanf("%d",&Stu[i].number);
scanf("%s",&Stu[i].name);
scanf("%d",&Stu[i].scored);
}
}