※ ChatGPTを利用し、要約された質問です(原文:c言語構造体に関するプログラム)
C言語構造体に関するプログラムで実行結果が意味不明な文字になる問題
このQ&Aのポイント
C言語構造体に関するプログラムを作成し、データファイルをコマンドラインから読み込んで平均と評価を出力する際に、意味不明な文字が表示される問題が発生しています。
データファイルの内容は学生の成績であり、ID、名前、スコア、成績を表す構造体で管理されています。ファイルを読み込んで平均点を計算し、成績評価を付与しようとしています。
しかし、プログラムを実行しても正しく平均と成績が表示されず、意味不明な文字が表示されてしまいます。解決策を教えていただける方がいらっしゃいましたら、ご教示いただけると幸いです。
データファイルをコマンドラインから読み込み、元のファイルの内容に加えその平均と評価を出力するプログラムを作っているのですが、実行しても意味のわからない文字が羅列され更に平均等が0になってしまいます。
分かる方いらっしゃいましたら回答よろしく願いします<(_ _ )>
↓読み込むデータファイルの内容
1077001 Jack 87 70 71 92 91
1077002 Jo 67 77 75 92 71
1077003 Akira 37 60 71 52 36
(中略)
1077016 Kazu 95 97 90 95 98
以下、ソースコード
#include <stdio.h>
#include <stdlib.h>
typedef struct{
char sid[8];
char sname[10];
int score[5];
char grade;
double ave;
} Record;
char grade_char(double);
int main(int argc, char *argv[]){
Record data[20];
FILE *fp;
int i;
if((fp = fopen(argv[1],"r")) == NULL){
printf("Cannot open file!\n");
exit(1);
}else if(argc == 1) printf("Error! Usage: ./a.out datafilename");
i = 0;
while(fscanf(fp,"%s %s %d %d %d %d %d",data[i].sid,data[i].sname,&data[i].score[0],&data[i].score[1],&data[i].score[2],&data[i].score[3],&data[i].score[4])){
i++;
data[i].ave = (data[i].score[0]+data[i].score[1]+data[i].score[2]+data[i].score[3]+data[i].score[4])/5;
data[i].grade = grade_char(data[i].ave);
printf("%s %s %d %d %d %d %d %.1f %c\n",data[i].sid,data[i].sname,data[i].score[0],data[i].score[1],data[i].score[2],data[i].score[3],data[i].score[4],data[i].ave,data[i].grade);
}
fclose(fp);
return 0;
}
char grade_char(double ave){
if(0 <= ave && ave <= 34)return 'F';
else if(35 <= ave && ave <= 49)return 'D';
else if(50 <= ave && ave <= 64)return 'C';
else if(65 <= ave && ave <= 79)return 'B';
else if(80 <= ave && ave <= 100)return 'A';
else return 0;
}