구조체 포인터 배열에 관한 문제인데요..
매1혹
질문 제목 : 컴파일하면 오류는 없구요 에러는 scanf관련 오류가 뜨긴하는데 이건 무시해도 된다고해서 무시했습니다. 그리고 결정적인건 switch문으로 4번을 입력하면 삭제 함수가 작동 되는데 삭제 함수에서 삭제할 이름을 입력하면 에러가 뜨면서 프로그램이 종료를 하는데요 이유를 잘 모르겠습니다..조언 부탁드립니다질문 내용 :
#include stdio.h
#include string.h
#include stdlib.h
struct person //구조체 선언
{
char name [20]; //구조체 변수 선언
char phone_number [30]; //구조체 변수 선언
};
struct person *call[1000];
void registration(int a) //등록함수
{
call[a] = (struct person*)malloc(sizeof(struct person));
printf(name:);
scanf(%s, &call[a]-name);
printf(phone_number:);
scanf(%s, &call[a]-phone_number);
}
void showall(int a) //등록된 모든 값을 보여주는 함수
{
int k;
for(k=0; ka; k++)
printf(name:%s---phone_number:%s---address:%lld\n, &call[k]-name, &call[k]-phone_number, &call[k]);
}
void search(int a) //이름으로 검색해서 이름,번호를 찾는 함수
{
int i=0;
char name[20]; printf(name:);
scanf(%s, &name);
for(i=0; ia; i++)
{
if(strcmp(call[i]-name, name)==0)
printf(name:%s---phone_number:%s---address:%lld\n, &call[i]-name, &call[i]-phone_number, &call[i]);
}
}
void deletion(int a) //이름으로 검색해서 해당 번호를 삭제하고 빈자리를 메꾸는 함수
{
int i=0;
int k=0;
char name[20]; printf(name:);
scanf(%s, &name);
while(k!=a)
{
for(i=0; ia; i++)
{
if(strcmp(call[i]-name, name)==0)
{
free(call[i]);
for(k=i ; ka; k++)
call[k] = call[k+1];
}
}
a--;
}
}
void modification(int a) //이름으로 검색해서 새로운 번호를 입력받는 함수
{
int i=0;
char name[20];
printf(name:);
scanf(%s, &name);
for(i=0; ia; i++)
{
if(strcmp(call[i]-name, name)==0)
{
printf(new_phone_number:);
scanf(%s, &call[i]-phone_number);
}
}
}
int main() &nain() //메인함수
{
int n;
int i=1;
int a=0; while(i!=0) //메뉴 선택과정
{
printf(*****menu*****\n);
printf(1.registration2.showall3.search\n);
printf(4.deletion5.modification6.exit\n);
printf(enter_the_menu_number:);
scanf(%d, &n);
switch(n)
{
case 1 :
registration(a);
a++;
break;
case 2 :
showall(a);
break;
case 3 :
search(a);
break;
case 4 :
deletion(a);
break;
case 5 :
modification(a);
break;
case 6 :
i=0;
break;
}
}
return 0;
}