47.对文件中的结构体数组进行排序
2015-06-05 15:54
253 查看
程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩,所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读取学生数据,并按照学号从小到大排序后,再用二进制方式白排序后的学生数据输出到filename所指的文件中覆盖原来的内容。
#include<stdio.h> #define N 5 typedef struct student { long sno; char name[10]; float score[3]; }STU; void fun(char *filename) { errno_t err; FILE * fp; int i, j; STU s , t; err = fopen_s(&fp,filename,"rb"); fread(s, sizeof(STU), N, fp); fclose(fp); for (i = 0;i < N - 1;i++) for (j = i + 1;j < N;j++) if (s[i].sno>s[j].sno) { t = s[i]; s[i] = s[j]; s[j] = t; } err = fopen_s(&fp,filename, "wb"); fwrite(s, sizeof(STU), N, fp); fclose(fp); } int main() { errno_t err; STU t = { {10005,"Zhangsan",95,80,88},{10003,"LiSi",85,70,78},{10002,"CaoKai",75,60,88},{10004,"FangFang",90,82,87},{10001,"MaChao",91,92,77} }, ss ; int i, j; FILE * fp; err = fopen_s(&fp,"student.dat","wb"); fwrite(t, sizeof(STU), N, fp); fclose(fp); printf("\n\nThe original data:\n\n"); for (j = 0;j < N;j++) { printf("\nNo;%ld Name:%-8s Score:", t[j].sno, t[j].name); for (i = 0;i < 3;i++) printf("%6.2f", t[j].score[i]); printf("\n"); } fun("student.dat"); printf("\n\nThe data after sorting:\n\n"); err= fopen_s(&fp,"student.dat", "rb"); printf("%d", err); fread(ss, sizeof(STU), 5, fp); fclose(fp); for (j = 0;j < 5;j++) { printf("\nNo:%ld Name:%-8s Score:", ss[j].sno, ss[j].name); for (i = 0;i < 3;i++) printf("%6.2f", ss[j].score[i]); printf("\n"); } getchar(); return 0; }
相关文章推荐
- 关闭UITableViewCell选中效果
- partition
- Polling轮询
- Object-C-selector
- httpurlconnection
- Android Studio开发环境建立aidl文件,怎么生成相应的java文件?
- Oracle 通过网关连接MySql的配置
- 第八题 P035
- DevC++中使用boost简析
- 《大话设计模式》--无熟人难办事?--迪米特法则<Lod>(11)
- CentOS6.5分区与文件系统
- Map集合迭代的两种方法
- 1028. List Sorting (25)
- 最长公共子序列问题(LCS)
- 通过反射获取实体的一切属性
- eclipse调试的方法和技巧
- php面向对象(OOP)—__autoload()函数
- 查野指针问题
- ffmpeg tutorial2
- 不可变对象的权衡