我需要爲正在學習的課程做一個任務。 這是一個簡單的電話簿應用程序在C中,我有一點麻煩,因爲我需要在程序中使用一些新的東西,並且截止日期非常緊。從二進制文件讀取和寫入malloc'd鏈接列表
我環顧四周,找到了一些答案,但每次都有新的答案出現。 :)
這是我(簡化)程序:
typedef struct record
{
char fname[31];
char lname[31];
char tel[21];
struct record *next;
} record;
record *new_entry(record *first, char *fname, char *lname, char *tel)
{
record *new;
new=(record*) malloc(sizeof(record));
strcpy(new->fname, fname);
strcpy(new->lname, lname);
strcpy(new->tel, tel);
new->next=first;
}
void fileopen (char *db_file)
{
FILE *fp;
fp=fopen(db_file, "rb");
if (fp==NULL)
{
fp=fopen(db_file, "wb");
fclose(fp);
fp=fopen(db_file, "r+b");
}
}
int main
{
char db[51];
record *next = NULL;
printf("File: "); scanf("%s, db);
fileopen(db);
printf("First name: "); scanf("%s", fname);
printf("Last name: "); scanf("%s", lname);
printf("Phone number: "); scanf("%s", tel);
first=new_entry(*first, fname, lname, tel);
}
我離開了不重要的部分。 現在我知道它不多,但是我的班長說我應該使用二進制文件來存儲和恢復數據。但是我真的很困惑,我該如何使用fread和fwrite。
非常感謝解決方案!我想我開始理解這個概念。 該程序現在存儲數據(至少我認爲它的確如此,因爲隨着我添加更多數據,文件不斷增長)。 啓動新的二進制文件時,程序在請求時正確顯示數據,但如果關閉它,並重新打開相同的文件,當它嘗試列出聯繫人時沒有任何反應。
這裏是(簡化再次,我有10個細節中的一個記錄在實際分配)開功能:
record *open (char *db_file, record start)
{
FILE *fp
record *temp = start;
fp=fopen(db_file, "rb");
while (fread(temp, sizeof(rekord), 1, fp)>0)
{
fread(temp->fname, sizeof temp->fname, 1, fp);
fread(temp->lname, sizeof temp->lname, 1, fp);
fread(temp->tel, sizeof temp->tel, 1, fp);
temp=temp->next;
}
fclose(fp);
return temp;
}
而且在main(),我用:
start=open(db, start);
聲明部分:
record *start=NULL;
如果有人回覆,再次感謝。
什麼讓你感到困惑? – alk
歡迎來到StackOverflow。你必須使用'fread'和'fwrite'?你允許使用'fscanf' /'fprintf'嗎?你也忘了你的具體問題,目前你的文章只是一個問題描述。 – Zeta
將'return new;'添加到new_entry()的末尾。 – wildplasser