fseek 定位覆寫)
void write_file(pBook node) {
static char filename[30] = "";
FILE *fp;
if (!node) { // 清空文件
fp = fopen(filename, "w");
fprintf(fp, "已銷毀的通訊錄");
filename[0] = '\0';
} else {
if (!filename[0]) {
printf("請輸入存儲路徑:");
scanf("%29s", filename);
fp = fopen(filename, "w");
fprintf(fp, "%-10s%-6s%-10s%-8s%-20s\n", "姓名","性別","地址","年齡","號碼");
} else fp = fopen(filename, "a");
fprintf(fp, "%-10s%-6s%-10s%-8d%-20s\n",
node->name, node->sex, node->addr, node->year, node->phone_num);
}
fclose(fp);
}
name, node->sex, node->addr, node->year, node->phone_num);
}
fclose(fp);
}
工程級改進建議
fgets + sscanf 避免 scanf 緩衝區殘留。flock)支援多進程。這是一個典型的「鏈表 + 文件持久化」教學級專案,涵蓋動態記憶體、指針操作、文件隨機讀寫、選單驅動等核心技能。實戰中建議直接上資料庫,但理解底層機制對排查問題至關重要。