成績データの件数に上限を設けることなく、また、扱うデータ件数の増減に柔軟に対応できるよう、一方向の連結リストを用いて成績データを記憶するようにしろ、ということみたいです。
一応エラーはすべて消せたのですが、連結リストとかポインタすらあまりわかっていないのでかなり厳しく、たいへん見にくいしいろいろ間違ってると思います。
それに前の課題ではできていたはずなのに、書き換えてみると
ファイルが開けません
になってしまうのです。
実行結果は下です
CMD>r data1.txt
file open error.
#include<stdio.h> #include<stdlib.h> typedef struct score Score; struct score{ char name[40]; int eng ,mat, sci; Score *next; }; Score *p, *head, **last; int main (void){ char cmd[256], fname[20], rank, str[256]; char f_inp[256]; FILE *fp; while (rank!='q'){ printf("CMD>"); fflush(stdout); fgets(cmd, 20, stdin); sscanf(cmd, "%c %s", &rank, fname); switch(rank){ case 'r': if((fp = fopen(str, "r")) == NULL){ printf("file open error.\n"); return(1); } last = &head; while(fgets(f_inp, 256 ,fp) != NULL){ p=(Score*)malloc(sizeof(Score)); sscanf(f_inp, "%s %d %d %d", p->name, &p->eng, &p->mat, &p->sci); *last = p; last = &(p->next); *last = NULL; } fclose(fp); break; case 'd': p = head; printf("name/eng/math/sci\n"); while(p != NULL){ printf("%s %d %d %d\n", p->name, p->eng, p->mat, p->sci); p = p->next; } break; case 'q': fclose(fp); printf("File close!\n"); break; default: printf("コマンドを正しく入力してください\n"); } } return (0); }読みこむファイルは下のような感じです
b 10 10 10
d 20 20 20
c 30 30 30
a 40 40 40
e 50 50 50
どこがどう間違っているのか教えていただけないでしょうか?
お願いします。