#include<stdio.h> #include<malloc.h> struct student { int sid; char name[20]; float score; }; void Input(student* ps,int n) { for(int i=0;i<n;i++) { printf("请录入第 %d 个学生信息:/n",i+1); printf("sid = "); scanf("%d",&(ps+i)->sid); printf("name = "); scanf("%s",(ps+i)->name); printf("score = "); scanf("%f",&(ps+i)->score); } } void Sort(student* ps,int n) { student st; for(int i=0;i<n-1;i++) { for(int j=0;j<n-1-i;j++) { if( (ps+j)->score < (ps+j+1)->score ) { st = *(ps+j); *(ps+j) = *(ps+j+1); *(ps+j+1) = st; } } } } void Write_txt(student* ps,int n) { FILE* fp = fopen("f://wf.txt","w"); if(fp == NULL) { printf("创建或打开文件失败!/n"); return; } fprintf(fp,"%d/n",n); for(int i=0;i<n;i++) { fprintf(fp,"%d ",(ps+i)->sid); fprintf(fp,"%s ",(ps+i)->name); fprintf(fp,"%f ",(ps+i)->score); fprintf(fp,"/n"); } fclose(fp); } void Print(student* ps,int n) { for(int i=0;i<n;i++) { printf("%d ",(ps+i)->sid); printf("%s ",(ps+i)->name); printf("%f/n/n",(ps+i)->score); } } void Read_txt(char* pfname) { int n;//保存学生个数 FILE* fp = fopen(pfname,"r"); if(fp == NULL) { printf("打开文件失败!/n"); return; } fscanf(fp,"%d",&n); student* p = (student*)malloc(sizeof(student)*n); for(int i=0;i<n;i++) { fscanf(fp,"%d",&(p+i)->sid); fscanf(fp,"%s",(p+i)->name); fscanf(fp,"%f",&(p+i)->score); } Print(p,n); free(p); } void Write_binary(student* ps,int n) { FILE* fp = fopen("f://wf1.txt","wb"); if(fp == NULL) { printf("创建或打开文件失败!/n"); return; } fwrite(&n,sizeof(int),1,fp); fwrite(ps,sizeof(student),n,fp); fclose(fp); } void Read_binary(char* pfname) { int n;//保存学生个数 FILE* fp = fopen(pfname,"rb"); if(fp == NULL) { printf("打开文件失败!/n"); return; } fread(&n,sizeof(int),1,fp); student* p = (student*)malloc(sizeof(student)*n); fread(p,sizeof(student),n,fp); Print(p,n); free(p); } void main() { /* int n; printf("请输入你要录入的学生个数:"); scanf("%d",&n); struct student* ps = (struct student*)malloc(sizeof(student)*n); Input(ps,n); Sort(ps,n);*/ // Write_txt(ps,n); // Read_txt("f://wf.txt"); // Write_binary(ps,n); // Read_binary("f://wf1.txt"); // free(ps); /*只读取第二个学生*/ FILE* fp = fopen("f://wf1.txt","rb"); if(fp == NULL) { printf("打开文件失败!/n"); return; } fseek(fp,sizeof(int) + sizeof(student),SEEK_SET); student st; fread(&st,sizeof(student),1,fp); fclose(fp); printf("%d ",st.sid); printf("%s ",st.name); printf("%f ",st.score); printf("/n"); }