いつもお世話になっています。C言語初心者でただいま勉強中です。構造体について質問させていただきます。ファイルから構造体配列に読み込んで以下のように出力するプログラムを作りたいんですが、worningとerrorが出て、実行がうまくできません。以下がコードです。
C言語
1コード 2```ここに言語を入力
#include <stdio.h> #include<stdlib.h> char grade(Record );/*成績判定*/ typedef struct{ char sid[8]; char sname[10]; int score[5]; char grade; double ave; } Record; char grade(Record );/*成績判定*/ int main(int argc,char *argv[]) { Record hyo[20],data[20]; FILE *fp; int i=0,j,z; if(argc!=2){/*ファイル名がないとき*/ printf("Error! Usage: ./a.out datafilename\n"); exit(8); } if((fp=fopen(argv[1],"r"))==NULL){/*ファイル読む*/ printf("Error! Usage: ./a.out datafilename\n"); exit(8); } while(1){ hyo[i].ave=0; if(fscanf((fp,"%s %s %d %d %d %d",hyo[i].sid,hyo[i].sname,&hyo[i].score[0],&hyo[i].score[1],&hyo[i].score[2],&hyo[i].score[3]))==EOF){ break;/*EOFなら、ループ抜ける*/ } for(j=0;j<4;j++){ hyo[i].ave+=hyo[i].score[j]; } i++; }z=i;/*EOFになったときのiの値記憶*/ for(i=0;i<j;i++){ hyo[i].ave=hyo[i].ave/4.0; hyo[i].grade= grade(hyo); } for(i=0;i<j;i++){ printf("%s %s %d %d %d %d %f %c\n",hyo[i].sid,hyo[i].sname,hyo[i].score[0],hyo[i].score[1],hyo.score[2],hyo[i],score[3],hyo[i].ave,hyo[i].grade); } fclose(fp); printf("Input a student name/ID :"); return 0; } char grade(Record obi) { int average;/*構造体に代入して条件分岐に使う*/ average=obi.ave; if(average>=0.0 && average<35.0){ return 'F'; } else if(average>=35.0 && average<50.0){ return 'D'; } else if(average>=50.0 && average<65.0){ return 'C'; } else if(average>=65.0 && average<80.0){ return 'B'; } else if(average>=80.0 && average<=100.0){ return 'A'; } }
コンパイルした結果
char grade(Record );/*成績判定*/ ^ a92.c:27:16: warning: expression result unused [-Wunused-value] if(fscanf((fp,"%s %s %d %d %d %d",hyo[i].sid,hyo[i].sname,&hyo[i].s... ^~ a92.c:27:19: warning: expression result unused [-Wunused-value] if(fscanf((fp,"%s %s %d %d %d %d",hyo[i].sid,hyo[i].sname,&hyo[i].s... ^~~~~~~~~~~~~~~~~~~~ a92.c:27:47: warning: expression result unused [-Wunused-value] if(fscanf((fp,"%s %s %d %d %d %d",hyo[i].sid,hyo[i].sname,&hyo[i].s... ~~~~~~ ^~~ a92.c:27:58: warning: expression result unused [-Wunused-value] if(fscanf((fp,"%s %s %d %d %d %d",hyo[i].sid,hyo[i].sname,&hyo[i].s... ~~~~~~ ^~~~~ a92.c:27:64: warning: expression result unused [-Wunused-value] ...%s %d %d %d %d",hyo[i].sid,hyo[i].sname,&hyo[i].score[0],&hyo[i].score[... ^~~~~~~~~~~~~~~~ a92.c:27:81: warning: expression result unused [-Wunused-value] ...%d %d %d",hyo[i].sid,hyo[i].sname,&hyo[i].score[0],&hyo[i].score[1],&hy... ^~~~~~~~~~~~~~~~ a92.c:27:98: warning: expression result unused [-Wunused-value] ...&hyo[i].score[2],&hyo[i].score[3]))==EOF){ ^~~~~~~~~~~~~~~~ a92.c:27:132: error: too few arguments to function call, expected at least 2, have 1 ...fscanf((fp,"%s %s %d %d %d %d",hyo[i].sid,hyo[i].sname,&hyo[i].score[0],&hyo[i].score[1],&hyo[i].score[2],&hyo[i].score[3]))... ~~~~~~ ^ a92.c:41:100: error: member reference base type 'Record [20]' is not a structure or union ...%c\n",hyo[i].sid,hyo[i].sname,hyo[i].score[0],hyo[i].score[1],hyo.score[... ~~~^~~~~~ a92.c:41:117: error: use of undeclared identifier 'score' ...score[3],hyo[i].ave,hyo[i].grade); ^ 7 warnings and 4 errors generated.
やりたいこと
./a.out seiseki.data
1249001 Jack 87 70 71 92 80.0 A
1249002 Jo 67 77 75 92 77.8 B
1249003 Akira 37 60 71 52 55.0 C
1249004 Kouichi 79 61 82 70 73.0 B
1249005 Georgia 77 60 75 55 66.8 B
1249006 Linus 88 66 75 45 68.5 B
1249007 Lucy 43 79 64 18 51.0 C
1249008 Boss 45 46 75 98 66.0 B
1249009 Mary 99 96 95 99 97.2 A
1249010 Makoto 40 25 37 27 32.2 F
1249011 Hiroshi 70 95 96 68 82.2 A
1249012 Max 34 58 52 45 47.2 D
1249013 Show 99 69 77 60 76.2 B
1249014 Kohei 81 45 46 75 61.8 C
1249015 Yasu 29 37 40 20 31.5 F
1249016 Kazu 95 97 90 95 94.2 A
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/16 00:48
2016/12/16 01:09
2016/12/16 01:14