直接以 "a" 模式追加寫入結構體,或讀取後未關閉檔案即以 "w" 重寫,導致檔案指標錯位、資料重複/遺漏。
// 1. 讀取所有記錄到記憶體
FILE *fp = fopen("student.txt", "r");
Student list[MAX];
int n = 0;
while (fscanf(fp, "%s %s %s %f %f %f %f", ...) == 7) n++;
fclose(fp);
// 2. 新增/修改/刪除記憶體中的 list[]
list[n++] = newStudent;
// 3. 統一寫回("w" 截斷重寫)
fp = fopen("student.txt", "w");
for (int i = 0; i < n; i++)
fprintf(fp, "%s %s %s %.2f %.2f %.2f %.2f\n", ...);
fclose(fp);