1. 程式人生 > >檔案寫入-結構體排序

檔案寫入-結構體排序

/*
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"); }