c语言文件读写操作代码:定义30名学生信息包含成绩,姓名和学号,实际人数从键盘上输入: (2)采用选择法实现学号从低到高排序,并输出每一个学生所有信息。
时间: 2024-12-17 16:51:14 浏览: 9
在C语言中,我们可以使用结构体来存储学生的信息,包括姓名、学号和成绩。然后使用fopen、fwrite和fclose函数进行文件的读写,以及feof和rewind进行文件指针的控制。这里是一个简单的示例来实现这个需求:
首先,定义一个学生结构体(student.h):
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 30
typedef struct {
int student_id;
char name[50];
float score;
} Student;
void sort_students(Student students[], int size);
```
接着,在主程序main.c中实现文件操作和排序功能:
```c
#include "student.h"
void read_students_from_file(Student students[], int *size);
void write_students_to_file(const Student students[], int size);
void sort_students(Student students[], int size);
int main() {
int actual_size, i;
// 读取实际学生数
printf("请输入学生总数: ");
scanf("%d", &actual_size);
if (actual_size > MAX_STUDENTS) {
printf("学生数量超过最大限制,最多只能存30人。\n");
return 1;
}
Student students[MAX_STUDENTS]; // 初始化一个足够大的数组
read_students_from_file(students, &actual_size);
// 排序
sort_students(students, actual_size);
// 输出排序后的学生信息
for (i = 0; i < actual_size; ++i) {
printf("学号: %d, 姓名: %s, 成绩: %.2f\n", students[i].student_id, students[i].name, students[i].score);
}
// 写回文件,这一步可以省略,因为我们只需要读取
// write_students_to_file(students, actual_size);
return 0;
}
// 读取文件并填充学生信息
void read_students_from_file(Student students[], int *size) {
FILE* file = fopen("students.txt", "r"); // 假设文件名为"students.txt"
if (!file) {
perror("Error opening the file.");
exit(1);
}
// 读取每个学生的数据并保存到结构体数组中
for (*size = 0; fgets(&students[*size], sizeof(Student), file); ++(*size)) {
sscanf(students[*size], "%d %[^ ]%f", &students[*size]->student_id, students[*size]->name, &students[*size]->score);
}
fclose(file);
}
// 写入文件的操作,这里仅做简单展示,实际项目中可能会更复杂
void write_students_to_file(const Student students[], int size) {
FILE* file = fopen("students.txt", "w");
if (!file) {
perror("Error writing to the file.");
exit(1);
}
for (int i = 0; i < size; ++i) {
fprintf(file, "%d %s %.2f\n", students[i].student_id, students[i].name, students[i].score);
}
fclose(file);
}
```
请注意,这个例子假设文件中的数据格式是每行一个学生,包括学号、姓名和成绩,例如:"1 John Doe 89.50"。实际编写时需要处理文件打开失败、格式错误等问题。
阅读全文