现有一批新生需录入信息(包括学号,姓名,高考,成绩),根据报道顺序录入学生信息后,根据学号升序排序写入文件中,然后把文件内容打印到屏幕上
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 1000
#define MAX_NAME_LEN 20
typedef struct {
int id;
char name[MAX_NAME_LEN];
int gaokao;
int score;
} Student;
int compare(const void *a, const void *b) {
return ((Student *)a)->id - ((Student *)b)->id;
}
int main() {
Student students[MAX_STUDENT_NUM];
int num = 0;
// 读入学生信息
printf("请输入学生信息(学号 姓名 高考成绩 成绩):\n");
while (scanf("%d %s %d %d", &students[num].id, students[num].name, &students[num].gaokao, &students[num].score) == 4) {
num++;
}
// 根据学号升序排序
qsort(students, num, sizeof(Student), compare);
// 写入文件
FILE *fp = fopen("students.txt", "w");
if (fp == NULL) {
printf("无法打开文件\n");
return 1;
}
for (int i = 0; i < num; i++) {
fprintf(fp, "%d %s %d %d\n", students[i].id, students[i].name, students[i].gaokao, students[i].score);
}
fclose(fp);
// 打印到屏幕上
fp = fopen("students.txt", "r");
if (fp == NULL) {
printf("无法打开文件\n");
return 1;
}
printf("学号\t姓名\t高考成绩\t成绩\n");
while (fscanf(fp, "%d %s %d %d", &students[num].id, students[num].name, &students[num].gaokao, &students[num].score) == 4) {
printf("%d\t%s\t%d\t\t%d\n", students[num].id, students[num].name, students[num].gaokao, students[num].score);
}
fclose(fp);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生结构体类型
typedef struct {
char studentID[20];
char name[30];
int gaokaoScore;
double grade;
} Student;
// 比较函数,用于排序
int compare(const void* a, const void* b) {
return strcmp(((Student*)a)->studentID, ((Student*)b)->studentID);
}
int main() {
int numStudents;
printf("请输入新生数量:");
scanf("%d", &numStudents);
// 动态分配新生信息存储空间
Student* students = (Student*)malloc(numStudents * sizeof(Student));
// 录入新生信息
printf("请按顺序录入学生信息:\n");
for (int i = 0; i < numStudents; i++) {
printf("请输入第%d个学生的学号:", i + 1);
scanf("%s", students[i].studentID);
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", students[i].name);
printf("请输入第%d个学生的高考分数:", i + 1);
scanf("%d", &(students[i].gaokaoScore));
printf("请输入第%d个学生的成绩:", i + 1);
scanf("%lf", &(students[i].grade));
}
// 根据学号升序排序
qsort(students, numStudents, sizeof(Student), compare);
// 将排序后的新生信息写入文件
FILE* file = fopen("students.txt", "w");
if (file == NULL) {
printf("无法打开文件!");
return 1;
}
for (int i = 0; i < numStudents; i++) {
fprintf(file, "学号:%s,姓名:%s,高考分数:%d,成绩:%.2lf
",
students[i].studentID, students[i].name, students[i].gaokaoScore, students[i].grade);
}
fclose(file);
// 打印文件内容到屏幕上
char line[100];
file = fopen("students.txt", "r");
if (file == NULL) {
printf("无法打开文件!");
return 1;
}
while (fgets(line, sizeof(line), file) != NULL) {
printf("%s", line);
}
fclose(file);
// 释放动态分配的内存
free(students);
return 0;
}