2.在当前目录下的磁盘文件“stu.dat”上存有10个学生的数据,已知student结构体定义如下:
struct student { // 建立结构体类型struct student
int num; // 学号
char name[20]; // 姓名
float score[3]; // 3门课成绩
float aver; // 平均成绩
};
编写程序实现:将第2,4,6,8,10个学生数据读入计算机中,并在屏幕上显示出来。
2.在当前目录下的磁盘文件“stu.dat”上存有10个学生的数据,已知student结构体定义如下:
struct student { // 建立结构体类型struct student
int num; // 学号
char name[20]; // 姓名
float score[3]; // 3门课成绩
float aver; // 平均成绩
};
编写程序实现:将第2,4,6,8,10个学生数据读入计算机中,并在屏幕上显示出来。
可以使用fscanf()函数从文件读取的学习信息存入学生信息结构数组即可,代码如下:
参考链接:
#include <stdio.h>
struct student { // 建立结构体类型struct student
int num; // 学号
char name[20]; // 姓名
float score[3]; // 3门课成绩
float aver; // 平均成绩
};
int main(void){
struct student ss[5],temp;
int i=0;
FILE * fp = fopen("stu.dat","r");
if(fp==NULL){
printf("读取文件stu.data失败,程序退出!\n");
return 0;
}
char ch;
while(i<5){ // 读取第2,4,6,8,10个学生的信息存入学生结构数组相应的元素中
// 读走单数位置的学生信息
fscanf(fp,"%d%s%f%f%f%f\n",&temp.num,temp.name,
&temp.score[0],&temp.score[1],&temp.score[2],&temp.aver);
// 把偶数位置的学生信息存入结构数组相应位置
if(i==4){ // 如果是最后一个学生信息,末尾不读取换行符了
fscanf(fp,"%d %s %f %f %f %f",&ss[i].num,ss[i].name,
&ss[i].score[0],&ss[i].score[1],&ss[i].score[2],&ss[i].aver);
}else{ // 如果不是最后一个学生信息,把每行结尾的换行符读走
fscanf(fp,"%d %s %f %f %f %f\n",&ss[i].num,ss[i].name,
&ss[i].score[0],&ss[i].score[1],&ss[i].score[2],&ss[i].aver);
}
i+=1;
}
fclose(fp);
// 打印结果
for(i=0;i<5;i++){
printf("第%d个学生的信息为:\n学号:%d,姓名:%s,第一门成绩:%.0f,第二门成绩:%.0f,第三门成绩:%.0f,平均成绩:%.0f\n",
(i+1)*2,ss[i].num,ss[i].name,ss[i].score[0],ss[i].score[1],ss[i].score[2],ss[i].aver);
}
return 0;
}
stu.dat(测试文件内容,以ANSI编码方式保存):
1001 张三 60 70 80 70
1002 李四 61 71 81 71
1003 王五 62 72 82 72
1004 赵六 63 73 83 73
1005 丁七 64 74 84 74
1006 张花 65 75 85 75
1007 章八 66 76 86 76
1008 田九 67 77 87 77
1009 文十 68 78 88 78
1010 程学 69 79 89 79