首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言學生資料檔案追加寫入導致資料錯亂:正確的讀取與重寫流程

     編輯:程式設計綜合問答

錯誤模式

直接以 "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);

優點

  • 避免檔案指標操作複雜度。
  • 資料一致性強,失敗時原檔案未損壞(可先寫 .tmp 再 rename)。
  • 適合中小型資料量(< 10MB)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved