현재 프로그램을 못돌려서 에러를 못찾고있습니다.
책을보고 베끼면서 해석하는데 모르는용어도 많구..
용어설명과 에러좀 찾아주실수 있을까요?
혼자서 하려니..몇시간째인지..ㅜㅜ
#include<stdio.h> //printf,puts,fopen,fwrite,fclose,getchar
#include<malloc.h> // malloc,free 용어설명좀 ㅜㅜ
#include<string.h> // strcpy,stsstr
#include<conio.h> // getch
#define add1file
struct peoplelist
{
char name[8];
char tel[15];
char add1[100];
char MofW[5];
char blood[5];
struct peoplelist*prev;
struct peoplelist*next;
}people;
people *addhead = null;
people *find;
int saved = 1; // 1을준이유는 등록 수정 삭제할 때 값이 0이되며, 종료할 때 값이0인 경우 파일에 주소데이터를 모두저장.
void get_add1list(void); // 에러시 발생
int add_list(const people*add1);
int find_list(const char *name);
void headposition(void);
void tailposition(void);
void add_add1(void); //등록
void find_add1(void); //검색
void modify_add1(void); //수정
void dele*e_add1(void); // 삭제
void print_add1(void); // 출력
void save_add1(void); //저장
void remove_add1(void);
void main(void)
{
int ch;
get_add1list();
puts("주소록 프로그램");
whlie(1) // 무한루프
{
printf("**********************************************\n");
printf("[1]등록 [2]검색 [3]수정 [4]삭제 [5]출력 [S]저장 [Q]종료\n");
printf("**********************************************\n");
ch = getch();
switch(ch);
{
case '1' : add_add1(); break;
case '2' : find_add1(); break;
case '3' : modify_add1(); break;
case '4' : dele*e_add1(); break;
case '5' : print_add1(); break;
case 's' :
case 'S' : add_add1(); break;
case 'q' :
case 'Q' :
if(saved == 0)
{
printf("\n\n 변경된 주소 데이터를 저장하시겠습니까? (Y / N)");
ch = getchar();
if(ch =='Y' || ch == 'y')save_add1();
{
remove_add1(); return;
default : printf("\n1 ~ 5 또는 S(저장) Q(종료)를 누르십시오.\n"); break;
}
}
}
void get_add1list(void) //함수선언
{
people add1;
FILE *p1;
p1 = fopen(add1file,"rb"); // ★★★★★★★★★★★★★★★"주소록", "w"
if( p1 == NULL )
{
perror("파일 개방 에러");
return;
}
while(!feof(p1))
{
fread(&add1,sizeof(add),1,p1);
if(ferror(p1))
{
fclose(p1);
perror("파일 읽기 에러");
return;
}
if(feof(p1)) break;
if(add_list(&add1)==0)
{
printf("주소 데이터를 링크 리스트에 추가 할 수 없습니다.\n");
}
}
fclose(p1);
}
int add_list(const people*add1)
{
people *plocal, *pv=addhead;
headposition();
//addhead가 초기화 되지않으면 한 번만 실행.
if(addhead==null)
{
plocal=malloc(sizeof(add1)); // 구조체에게 할당
memset(plocal,0,sizeof(add1));
if(plocal,0,sizeof(add1)
{
return 0;
}
addhead=plocal;
addhead->prev=NULL;
addhead->next=NULL;
}
else // addhead가 초기화가 되어도 계속실행
{
plocal = malloc(sizeof(add1));
memset(plocal,0,seizeof(add1));
if(plocal == NULL)
{
return 0;
}
while(pv->next)
{
pv=pv->next;
}
pv->next=plocal;
plocal->prev = pv;
ploacl->next=NULL;
}
strcpy(plocal->name, add1->name);
strcpy(plocal->tel, add1->tel);
strcpy(plocal->add1,add1->add1);
strcpy(plocal->MofW,add1->MofW);
strcpy(plocal->blood,add1->boold);
return 1;
}
void headposition(void)
{
if(addhead==NULL)return;
while(addhead->prev)
{
addhead = addhead->prev;
}
}
void tailposition(void)
{
if(addhead ==NULL)return;
while(addhead->next)
{
addhead=addhead->next;
}
}
int find_list(const char *name)
{
add1*plocal;
headposition(); // 첫주소의 데이터를 가리킴
plocal = addhead;
while(plocal)
{
if(strstr(plocal->name,name))
{
find = plocal;
return 1;
}
plocal = plocal->next;
}
return 0;
}
void add_add1(void)
{
people add1;
memset(&add1,0,sizeof(people));
printf("\n이 름 :");gets(add1.name);
if(strlen(add1.name)==0)return;
printf("전화번호 :");gets(add1.tel);
printf("주 소 :");gets(add1.add1);
printf("성 별 :");gets(add1.MofW);
printf("혈 액 형 :");gets(add1.blood);
if(find_list(add1.name)==1)
{
printf("\n이미 등록되어있습니다.\n=n");
puts(find->name);
puts(find->tel);
puts(find->add1);
puts(find->MofW);
puts(find->blood);
return;
}
if(add_list(&add1))
{
saved = 0;
printf("\n등록되었습니다.\n\n");
}
else
{
printf("\n등록이 실패되었습니다.\n\n");
}
}
void find_add1(void)
{
char buff[100] = {0,};
add1 *plocal;
printf("\n\n검색할 이름/전화/주소/성별/혈액형의 일부를 입력하십시오.\n");
printf("이름/전화/주소/성별/혈액형 :");gets(buff);
if(strlen(buff)==0)return;
headposition();
plocal = addhead;
find=NULL;
while(plocal)
{
if(strstr(plocal->name,buff)) // 이름으로 검색
{
find = plocal;
break;
}
if(strstr(plocal->tel,buff)) // 전화를 검색
{
find=plocal;
break;
}
if(strstr(plocal->add1,buff)) // 주소로검색
{
find=plocal;
break;
}
if(strstr(plocal->MofW,buff)) //성별로 검색
{
find=plocal;
break;
}
if(strstr(plocal->blood,buff)) //혈액형으로 검색
{
find=plocal;
break;
}
plocal = plocal->next;
}
if(find)
{
puts(find->name);
puts(find->tel);
puts(find->add1);
puts(find->MofW);
puts(find->blood);
}
else
{
printf("\n\n%s를 주소록에서 찾을 수 없습니다.\n\n",buff);
}
}
void modify_add1(void)
{
char name[100] = {0,};
people add1;
while(1)
{
printf("\n\n수정할 이름 :"); gets(name);
if(strlen(name) == 0)return;
if(find_list(name) == 0)
{
puts("수정할 이름을 찾을 수 없습니다.");
continue;
}
}
break;
}
printf("\n%s에 대한 주소 데이터는 아래와 같습니다.\n",name);
puts(find->name);
puts(find->tel);
puts(find->add1);
puts(find->MofW);
puts(find->blood);
printf("\n수정하려는 이름/전화/주소/성별/혈액형을 입력 후 엔터키를 치세요.\n");
printf("이 름:");gets(add1.name);
printf("전 화:");gets(add1.tel);
printf("주 소:");gets(add1.add1);
printf("성 별:");gets(add1.MofW);
printf("혈 액 형:");gets(add1.blood);
if(strlen(add1.name)==0) strcpy(add1.name,name);
sptrcpy(find->name,add1.name);
sptrcpy(find->tel,add1.tel);
sptrcpy(find->add1,add1.add1);
sptrcpy(find->MofW,add1.MofW);
sptrcpy(find->blood,add1.blood);
saved = 0;
printf("%s에 대한 주소 데이터를 수정하였습니다.\n",name);
}
void dele*e_add1(void)
{
char name[100] ={0,};
add1 *plocal;
int ch;
while(1)
{
printf("\n\n삭제할 이름:");gets(name);
if(strlen(name)==0)return;
if(find_list(name)==0)
{
puts("삭제할 이름을 찾을 수 없습니다.");
continue;
}
}
break;
}
puts(find->name);
puts(find->tel);
puts(find->add1);
puts(find->MofW);
puts(find->blood);
printf("%s을 삭제하겠습니까?(Y/N)",name);
ch = getch();
fflush(stdin);
if(ch=='Y' || ch=='y')
{
if(find->prev==NULL)
{
if(find->next==NULL)
{
free(find);
addhead=NULL;
}
else
{
plocal = find->next;
free(find);
plocal->prev=NULL;
addhead=plocal;
}
}
else if(find->next == NULL)
{
plocal = find->prev;
free(find);
plocal->next = NULL;
addhead = plocal;
}
else
{
plocal=find->prev;
plocal->next=find->next;
plocal=find->next;
plocal->prev = find->prev;
free(find);
addhead = plocal;
}
saved = 0;
printf("\n검색된 주소 데이터를 삭제하였습니다.\n");
}
}
void print_add1(void)
{
int count =1;
add1*plocal
headposition();
plocal = addhead;
while(plocal->prev)
{
plocal = plocal->prev;
}
printf("\n\n");
while(plocal)
{
printf("번호.%d\n",count++);
puts(plocal->name);
puts(plocal->tel);
printf("%s\n\n",plocal->add1);
printf("아무키나 누르시오.(중지 : Q or q)\n");
if(getch()=='q' || getch()=='Q')return
plocal = plocal->next;
}
}
void save_add1(void)
{
people *plocal;
FILE *p1;
if(addhead ==NULL)return;
p1 = fopen(add1FILE,"w+b");
if(p1==NULL)
{
perror("파일 개방 에러");
return;
}
headposition();
while(addhead)
{
plocal = addhead->next;
fwrite(addhead,sizeof(add1),1,p1);
addhead = plocal;
}
printf("\n모든 데이터를 파일에 저장하였습니다.");
saved = 1;
fclose(p1);
}
void remove_add1(void)
{
people *plocal;
if(addhead ==NULL)return;
headposition();
while(addhead)
{
plocal = addhead->next;
free(addhead);
addhead = plocal;
}
addhead = NULL;
}