내가 맡은 수업에 대한 과제를해야합니다. C로 작성된 간단한 전화 번호부 응용 프로그램입니다. 프로그램에서 새로운 것을 사용해야하기 때문에 약간 문제가 있습니다. 마감 기한은 꽤 깁니다.malloc 연결된 목록을 읽고 이진 파일에서 읽고 쓰는 것
나는 주위를 둘러 보았고 답을 찾았지만 매번 새로운 답변이 나왔습니다. :)
이 내 (간체) 프로그램 :
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를 어떻게 사용해야하는지 정말 혼란 스럽습니다.
솔루션을 제공해 주셔서 감사합니다. 나는이 개념을 이해하기 시작했다고 생각합니다. 새로운 바이너리 파일을 시작할 때 프로그램은 요청시 데이터를 올바르게 표시하지만 프로그램을 닫으면 프로그램이 데이터를 저장합니다 (최소한 파일이 커지면서 계속 증가하기 때문에 데이터가 저장됩니다) 동일한 파일을 다시 열면 연락처를 나열하려고 할 때 아무 일도 일어나지 않습니다.
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;
}
그리고) (주에서
, 내가 사용 :start=open(db, start);
선언 여기
오픈 기능 (내가 실제 할당에서 하나 개의 레코드 10 개 세부 사항을 다시 단순화)에의 부분 :record *start=NULL;
누군가 답장을 보내면 다시 한 번 감사드립니다.
무엇이 당신을 혼란스럽게합니까? – alk
StackOverflow에 오신 것을 환영합니다. 'fread'와'fwrite'를 사용해야합니까? 'fscanf' /'fprintf'를 사용할 수 있습니까? 또한 특정 질문을 잊어 버렸습니다. 현재 게시물은 문제 설명 일뿐입니다. – Zeta
new_entry()의 끝에'return new;'를 추가하십시오. – wildplasser