実現したいこと
・個人データ(名前、学籍番号、3教科の得点)を構造体で表す。
・ファイルからデータを読み込み、表示する。
・その後、平均点の計算をし、名前・学籍番号・得点のソートを選択する。昇順・降順も選択する。
これらを実行したいのですがmain関数内の最初のdo文しか出力されずまたコンパイルエラーメッセージではなくruntime errorになりエラーの原因が自分では見つけることができませんでした。
どなたかご教示よろしくお願いいたします。
発生しているエラー
paiza.ioでruntime error(Exit status:153(File size limit exceeded))と表示され
実行結果が
ファイル読み込み:1 終了:0 :ファイルをオープンできません。
ファイル読み込み:1 終了:0 :ファイルをオープンできません。
ファイル読み込み:1 終了:0 :ファイルをオープンできません。
ファイル読み込み:1 終了:0 :ファイルをオープンできません。
が永遠と続いています。
画像は読み込みたいファイルです。エディタエリアMain.Cに該当ソースコードを入力しています。
ソースコード
/*成績管理システム*/ #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; /*ファイル読み込み*/ int out_file(Student a[]) { FILE *fp; int i=0; if((fp = fopen("hw.dat","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)){ 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,b,c,d; int flag=0; int i=0; int cnt=0; double mave,eave,pave; 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,&mave,&eave,&pave); printf("数学の平均点は%3.1lfです。",mave); printf("英語の平均点は%3.1lfです。",eave); printf("物理の平均点は%3.1lfです。",pave); } do{ printf("各順にソートしますか? はい:1 いいえ:2 :"); scanf("%d",&b); if(a==1){ printf("どのデータによってソートしますか? 名前:1 学籍番号:2 数学:3 英語:4 物理:5 :"); scanf("%d",&c); printf("昇順と降順どちらでソートしますか? 昇順:1 降順:2 :"); scanf("%d",&d); if(c==1&d==1){ puts("\n名前を昇順にソートしました。"); sort_by_name1(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); } if(c==1&d==2){ puts("\n名前を降順にソートしました。"); sort_by_name2(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); } if(c==2&d==1){ puts("\n学籍番号を昇順にソートしました。"); sort_by_number1(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); } if(c==2&d==2){ puts("\n学籍番号を降順にソートしました。"); sort_by_number2(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); } if(c==3&d==1){ puts("\n数学の得点を昇順にソートしました。"); 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); } if(c==3&d==2){ puts("\n数学の得点を降順にソートしました。"); sort_by_math2(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); } if(c==4&d==1){ puts("\n英語の得点を昇順にソートしました。"); sort_by_eng1(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); } if(c==4&d==2){ puts("\n英語の得点を降順にソートしました。"); sort_by_eng2(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); } if(c==5&d==1){ puts("\n物理の得点を昇順にソートしました。"); sort_by_phy1(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); } if(c==5&d==2){ puts("\n物理の得点を降順にソートしました。"); sort_by_phy2(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); } } }while(b!=2); return 0; }
補足
main関数内で使用しているソート(sort_by_name1)などの関数は/学生を表す構造体/と/ファイル読み込み/の間に作成しており、途中の作成段階ではエラーになりませんでした。
使用PC Windows10 作成ソフト paiza.io
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/09 04:27