実現したいこと
・個人データ(名前、学籍番号、3教科の得点)を構造体で表す
・データをファイルから読み込む
・名前、在籍番号、3教科の得点のいずれかと昇順か降順を選んでソートできるようにする。←この部分が出来ないです。
なぜソートの結果、"printf"内が出力されないのでしょうか。
どなたかご教示よろしくお願いいたします。
出力結果
ファイル読み込み:1 終了:0 : Mami h567 60.0 80.0 70.0 Momo h878 80.0 90.0 70.0 Kinoshita h698 90.0 60.0 70.0 Koko h767 80.0 80.0 80.0 ファイル読み込み:1 終了:0 :
ソースコード
/*成績管理システム*/ #include<stdio.h> #include<string.h> #include<math.h> #define NAME_LEN 128 #define NUM_LEN 64 #define NUMBER 5 /*学生を表す構造体*/ typedef struct{ char name[NAME_LEN]; //名前 char number[NUM_LEN]; //学籍番号 double math; //数学の得点 double eng; //英語の得点 double phy; //物理の得点 }Student; /*x,yで指す学生の入れ替え*/ void swap_Student(Student *x,Student *y) { Student temp = *x; *x = *y; *y = temp; } /*数学の得点順にソート*/ void sort_by_math1(Student a[],int n) //昇順 { int i,j; for(i = 0;i < n - 1;i++){ for(j = n - 1;j > i;j--) if(a[j-1].math > a[j].math) swap_Student(&a[j - 1],&a[j]); } } /*ファイルの読み込み*/ int out_file(Student a[]) { FILE *fp; int i = 0; if((fp = fopen("File1","r")) == NULL) printf("\aファイルをオープンできません\n"); else{ while(fscanf(fp,"%s %s %lf %lf %lf",a[i].name,a[i].number,&a[i].math,&a[i].eng,&a[i].phy)==5){ printf("%-10s %-10s %5.1f %5.1f %5.1f\n",a[i].name,a[i].number,a[i].math,a[i].eng,a[i].phy); i++; } fclose(fp); } return i; } int main(void) { int flag=0; int i=0; int cnt=0; Student human[40]; do{ printf("ファイル読み込み:1 終了:0 :\n"); scanf("%d",&flag); if(flag==1) out_file(human); }while(flag!=0); sort_by_math1(human,cnt); for(i=0;i<cnt;i++) printf("%-10s %-10s %5.1f %5.1f %5.1f\n",human[i].name,human[i].number,human[i].math,human[i].eng,human[i].phy); return 0; }
補足
paiza.ioという無料サイトでC言語で作成しています。
ソースコードを短くするために数学の得点をソートする関数のみ記載しました。
回答1件
あなたの回答
tips
プレビュー