回答編集履歴
2
readFile での新規要素の追加に insertItem を使うように修正
answer
CHANGED
@@ -69,8 +69,10 @@
|
|
69
69
|
|
70
70
|
struct ST_MEMBER *readFile(char *filename) {
|
71
71
|
FILE *fp;
|
72
|
-
struct ST_MEMBER
|
72
|
+
struct ST_MEMBER head, *last = &head;
|
73
73
|
|
74
|
+
head.next = NULL;
|
75
|
+
|
74
76
|
if(fopen_s(&fp, filename, "r") != 0) { //読み取りモードでファイルを開く
|
75
77
|
printf("ファイルのオープンに失敗しました\n");
|
76
78
|
return NULL;
|
@@ -81,8 +83,8 @@
|
|
81
83
|
struct ST_MEMBER *new = (struct ST_MEMBER *)malloc(sizeof(struct ST_MEMBER));
|
82
84
|
if(!new) {
|
83
85
|
printf("メモリが確保できませんでした。\n");
|
84
|
-
freeList(
|
86
|
+
freeList(head.next); //確保した全てを開放する
|
85
|
-
|
87
|
+
head.next = NULL;
|
86
88
|
break;
|
87
89
|
}
|
88
90
|
|
@@ -92,18 +94,14 @@
|
|
92
94
|
break;
|
93
95
|
}
|
94
96
|
|
95
|
-
if(top == NULL) top = new;
|
96
|
-
|
97
97
|
//既存の後ろに接続する
|
98
|
-
new->prev = p;
|
99
|
-
new->next = NULL;
|
100
|
-
|
98
|
+
insertItem(last, new);
|
101
|
-
|
99
|
+
last = new;
|
102
100
|
}
|
103
101
|
|
104
102
|
fclose(fp);
|
105
103
|
|
106
|
-
return
|
104
|
+
return head.next;
|
107
105
|
}
|
108
106
|
|
109
107
|
//年齢を昇順に表示したいので年齢を比較する。
|
1
malloc 失敗時に fclose しないバグを修正
answer
CHANGED
@@ -82,7 +82,8 @@
|
|
82
82
|
if(!new) {
|
83
83
|
printf("メモリが確保できませんでした。\n");
|
84
84
|
freeList(top); //確保した全てを開放する
|
85
|
-
|
85
|
+
top = NULL;
|
86
|
+
break;
|
86
87
|
}
|
87
88
|
|
88
89
|
ret = fscanf(fp, "%4d%16s%5d%5s\n", &new->number, new->name, &new->age, new->gender);
|