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