void displayStudents() { printf("学号\t姓名\t语文\t数学\t语言\t平均分\n"); for (int i = 0; i < student_num; i++) { printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].id, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2], students[i].avg_score); } }在代码上增加一个导入文件的代码
时间: 2024-03-18 07:41:30 浏览: 52
create_a_thread_under_linux.zip_linux create thre_linux create t
假设你要从文件中读取数据并存储到`students`结构体数组中,可以在函数中加入以下代码来实现:
```c
#include <stdio.h>
void readStudentsFromFile()
{
FILE *fp = fopen("students.txt", "r"); // 打开文件
if (fp == NULL) {
printf("打开文件失败!\n");
return;
}
student_num = 0; // 将学生数清零
while (fscanf(fp, "%s%s%f%f%f", students[student_num].id, students[student_num].name, &students[student_num].score[0], &students[student_num].score[1], &students[student_num].score[2]) != EOF) {
students[student_num].avg_score = (students[student_num].score[0] + students[student_num].score[1] + students[student_num].score[2]) / 3; // 计算平均分
student_num++; // 学生数加1
}
fclose(fp); // 关闭文件
}
```
这段代码使用`fopen`函数打开一个名为"students.txt"的文件,并将文件指针赋值给`fp`。如果打开文件失败,函数就会直接返回。接下来,利用`fscanf`函数从文件中逐行读取数据,存储到`students`数组中,并计算每个学生的平均分。最后,关闭文件并返回。你可以将这段代码与原来的`displayStudents`函数结合使用,例如:
```c
#include <stdio.h>
struct Student { // 定义学生结构体
char id[10]; // 学号
char name[20]; // 姓名
float score[3]; // 分数
float avg_score; // 平均分
} students[100]; // 最多存储100个学生信息
int student_num; // 学生数
void readStudentsFromFile()
{
// 插入读取文件的代码
}
void displayStudents()
{
printf("学号\t姓名\t语文\t数学\t语言\t平均分\n");
for (int i = 0; i < student_num; i++) {
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].id, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2], students[i].avg_score);
}
}
int main()
{
readStudentsFromFile(); // 读取文件中的学生信息
displayStudents(); // 显示学生信息
return 0;
}
```
这样,你就可以将文件中的学生信息读取到程序中,并通过`displayStudents`函数进行输出。
阅读全文