前提・実現したいこと
csvファイルに保存した学籍番号と、各人の15科目のスコアから、GPTとGPAを求めるプログラムを作成したいです。
前提として、構造体を使ってプログラムを書いていて、エラーは出ないのですが、結果が出力されません。
プログラム自体は単純なものだと思うのですが、構造体のポインタ処理がうまくできていないような気がします。
分かる方いたら回答をお願いします。
###csvファイル
xx268001 - B A B - A D A D D D - B B A
xx268002 S A A A A - - C D C S - D A -
xx268003 B A A B - B A B - A A A C A A
xx268004 A B A A D B B - A C A D - C D
xx268005 A - - A C S A C B A D C C C D
xx268006 A A A A B - A C B D D D B D A
xx268007 A B C A B A D D D D B D B A A
xx268008 A A A D B A B A A B S A A A D
xx268009 - C B A A A B D A - D B C A -
xx268010 - S B - A B - C A C A S B D A
xx268011 S A - - - B A A C B B A D C A
xx268012 C - B A B C B B C A C - A A A
xx268013 A - D A B A B D D B D - A B D
xx268014 - - C A D B B A A A D C - A A
xx268015 A A A - B - - A B A B A B A A
xx268016 B A A D A B B - - - B D - - C
xx268017 C A B D D - B D C D D - C A D
xx268018 S B A - A A - D A A C A C D A
xx268019 C C A - D D - A A C B C - C -
xx268020 A A A A A S - - A B - A - C B
xx268021 B C B - A - A A S B S A - A C
xx268022 D A - A - B D A C A - A B B B
xx268023 B D B C B - D D A B B D A A S
xx268024 C C S A A A S B A - C S S D D
xx268025 B S A C A B D A D S - B A B A
xx268026 A A - D C B A A S D A C B - -
xx268027 - B - A D A D A C - - B - D C
xx268028 D A B - A A C A A D B - D B B
xx268029 A D - D D B C S A - A A B C C
xx268030 A B D A D C B B - C A S C A A
該当のソースコード
c
1#include <stdio.h> 2#include <string.h> 3 4#define NUM_STUDENT 30 5#define MAX_CLASS 15 6#define MAX_ID_LENGTH 8 7 8int GPT[NUM_STUDENT]; 9float GPA[NUM_STUDENT]; 10 11typedef struct { 12 char *StudentID; 13 14 char *Grade; 15} student; 16 17void read_data(student *s, char *fname) { 18 int i, j; 19 char studentID[MAX_ID_LENGTH + 1]; 20 char grade[MAX_CLASS]; 21 FILE *fp = fopen(fname, "r"); 22 23 for (i = 0; i < NUM_STUDENT; i++) 24 { 25 fscanf(fp, "%[^,]", studentID); 26 for (j = 0; j < MAX_CLASS; j++) { 27 fscanf(fp, ",%c", &grade[j]); 28 } 29 fscanf(fp, "\n"); 30 31 s->StudentID=studentID; 32 33 for(j=0;j<MAX_CLASS;j++){ 34 s->Grade[j]=grade[j]; 35 GPT[i] += s->Grade[j]; 36 } 37 GPA[i] = (float)GPT[i]/4.0; 38 } 39 fclose(fp); 40} 41 42int main(int argc, char *argv[]) 43{ 44 int i; 45 student s[NUM_STUDENT]; 46 47 if (argc != 2) { 48 printf("Usage: %s ScoreDataFile(*.csv)\n", argv[0]); 49 return 1; 50 } 51 char *fname = argv[1]; 52 53 read_data(s, fname); 54 55 for (i = 0; i < NUM_STUDENT; i++) { 56 57 printf("%s,GPT:%d,GPA:%.2f\n", s[i].StudentID, GPT[i], GPA[i]); 58 } 59 60 return 0; 61}
回答3件
あなたの回答
tips
プレビュー