게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
빡침주의) C언어 질문입니다.
게시물ID : computer_132272짧은주소 복사하기
작성자 : 익명임네다
추천 : 0
조회수 : 341회
댓글수 : 9개
등록시간 : 2013/12/03 23:05:40
현재 프로그램을 못돌려서 에러를 못찾고있습니다.
책을보고 베끼면서 해석하는데 모르는용어도 많구..
용어설명과 에러좀 찾아주실수 있을까요?
혼자서 하려니..몇시간째인지..ㅜㅜ
 
#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;
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호