前提・実現したいこと
大学の講義で構造体で個人データ(名前、学籍番号、3教科の得点)を表し、データをファイルから読み込む。その後、平均点の計算や得点順にソートする処理を行うプログラムを作成しています。
平均点を出力したいのですのですが計算結果が表示されず「nan」と出てきます。
平均点を求める関数内とmain関数内のどちらに問題があるのかわかりません。
どなたかご教示よろしくお願いいたします。
出力結果
ファイル読み込み: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 ファイル読み込み:1 終了:0 :平均点を表示しますか? はい:1 いいえ:2 :数学の平均点はnanです。英語の平均点はnanです。物理の平均点はnanです。
該当のソースコード
/*成績管理システム*/ #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; } /*3教科それぞれの平均点を求める*/ void sum_Student(Student a[],int n,double *ave1,double *ave2,double *ave3) { int i=0; double sum1=0; double sum2=0; double sum3=0; for(i=0;i<n;i++){ sum1 += a[i].math; sum2 += a[i].eng; sum3 += a[i].phy; } *ave1 = sum1/n; *ave2 = sum2/n; *ave3 = sum3/n; } /*ファイルの読み込み*/ 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 a; int flag=0; int i=0; int cnt=0; double ave1; double ave2; double ave3; Student human[40]; do{ printf("ファイル読み込み:1 終了:0 :"); scanf("%d",&flag); if(flag==1) out_file(human); }while(flag!=0); printf("平均点を表示しますか? はい:1 いいえ:2 :"); scanf("%d",&a); if(a==1){ sum_Student(human,cnt,&ave1,&ave2,&ave3); printf("数学の平均点は%3.1lfです。",ave1); printf("英語の平均点は%3.1lfです。",ave2); printf("物理の平均点は%3.1lfです。",ave3); } return 0; }
補足情報(FW/ツールのバージョンなど)
paiza.ioという無料サイトでC言語で作成
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/09 22:10