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

C 語言通訊錄文件讀寫:二次運行數據丟失因未從文件加載到結構體數組

     編輯:程式設計綜合問答

核心缺陷

程序啟動時**未將 `txl.txt` 內容讀入 `members[]` 數組**,導致內存數組為空,列表/查找/刪除均無數據;退出時僅保存新增數據,舊數據丟失。

修正架構


// 啟動時加載
void load() {
    FILE *fp = fopen("txl.txt", "r");
    if (!fp) return;
    while (fscanf(fp, "name:%19s phone:%19s qq:%19s wechat:%19s",
                  members[count].name, members[count].phone,
                  members[count].qq, members[count].wechat) == 4) {
        count++;
    }
    fclose(fp);
}

// 新增時追加寫入
void add() {
    FILE *fp = fopen("txl.txt", "a");
    // ... 輸入驗證 ...
    fprintf(fp, "name:%s phone:%s qq:%s wechat:%s\n", ...);
    fclose(fp);
    // 同步內存
    strcpy(members[count].name, name); ...
    count++;
}

// 列表/查找/刪除均操作 members[],刪除後重寫整個文件
void saveAll() {
    FILE *fp = fopen("txl.txt", "w");
    for (int i=0; i

關鍵改進

  1. **啟動加載、退出保存**,內存與文件同步。
  2. 刪除/修改後**全量覆寫文件**(`w` 模式),避免文件殘留舊數據。
  3. 使用 `fgets` + `sscanf` 解析行,比 `fscanf` 更健壯。
  4. 結構體字段長度預留 `\0`,防止溢出。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved