檔案寫入-結構體排序
阿新 • • 發佈:2019-01-01
/* 3、編寫一個程式,實現如下功能: (1)將5個學生的資訊(包括學號、姓名、成績三項資訊)寫入到file1中。 (2)從file1中讀出5個學生的資訊,按成績自高到低排序,排序後的結果寫入到檔案file2中。 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 5 typedef struct student { int num; char name[8]; float socre; }Student; //寫入成績並且返回stu值 void write(char*file,FILE *fp,Student *stu) { if((fp=fopen(file,"w"))==NULL) { printf("檔案建立失敗"); return; } for(int i=0;i<N;i++) { fprintf(fp,"%d %s %.2f\n",stu[i].num,stu[i].name,stu[i].socre); } fclose(fp); } //排序準備寫入檔案2的資料 Student *sort(Student *stu2) { Student tmp;//結構體臨時變數,不要定義為*tmp會報錯!!! //氣泡排序 for(int i=0;i<N-1;i++) { for(int j=0;j<N-i-1;j++) { if(stu2[j].socre<stu2[j+1].socre) { tmp = stu2[j]; stu2[j] = stu2[j+1]; stu2[j+1]= tmp ; } } } }int main() { FILE *fp; char *file1="D:\\test1.txt",*file2="D:\\test2.txt"; //準備成績 Student stu[N]; printf("請輸入五位個學生的學號/姓名/成績(格式為xxxxx xx xx):\n"); for(int i=0;i<N;i++) { scanf("%d %s %f",&stu[i].num,stu[i].name,&stu[i].socre); getchar(); } //寫入text1 write(file1,fp,stu); //排序成績 Student *stu2; stu2 = sort(stu); //寫入text2 write(file2,fp,stu); system("pause"); }