안녕하세요.
기존에 배열형태로 출력하였던 구조체를 포인터를 선언하여
포린타 형태 ->로 바꿔서 컴파일 하려고 합니다.
따라서 포인터를 선언하고 모든 배열부분을 포린터형 ->으로
전환하였으나 컴파일 에러가 나네요.
포인터 선언부에 문제가 있는것 같은데 제가 가진 프린트애는 자세한 설명이 없어서 혹시 어떤 부분이 문제가 있는건지 궁금합니다
struct member *p;
struct member list[SIZE];
struct member *p = &list[SIZE];
list[SIZE].dob = &d;
포인터 선언부는 위와 같습니다
#include <stdio.h>
#include <stdlib.h>
#define SIZE 1000
struct date {
char month[20];
char day[20];
char year[20];
}d;
struct member{
char name[20];
struct date *dob;
char adress[20];
char email[20];
char number[20];
};
int menu,num,i,searchnumber,category,printout,j,yesorno;
struct member *p;
struct member list[SIZE];
struct member *p = &list[SIZE];
list[SIZE].dob = &d;
char search[20];
char delname[20];
void input(){
printf("이름을 입력하세요\n");
scanf("%s",p[num]->name);
printf("생년월일중 월을 입력하세요\n");
scanf("%s",p[num]->dob->month);
printf("생년월일중 일을 입력하세요\n");
scanf("%s",p[num]->dob->day);
printf("생년월일중 년을 입력하세요\n");
scanf("%s",p[num]->dob->year);
printf("주소를 입력하세요\n");
scanf("%s",p->[num]->adress);
printf("메일을 입력하세요\n");
scanf("%s",p[num]->email);
printf("전화번호를 입력하세요\n");
scanf("%s",p[num]->number);
num++;
}
void research(){
printf("검색할 단어를 입력하세요\n");
scanf("%s",search);
for(i=0;i<num;i++)
{
if( (strcmp(p[i]->name,search)==0) || (strcmp(p[i]->dob->month,search)==0) || (strcmp(p[i]->dob->day,search)==0) ||
(strcmp(p[i]->dob->year,search)==0) || (strcmp(p[i]->adress,search)==0) || (strcmp(p[i]->number,search)==0) ||
(strcmp(p[i]->email,search)==0))
{
printf("검색된 구조체의 정보는 다음과 같습니다\n\n");
printf("이름:%s \n생년월일:%s %s %s \n주소:%s \n메일:%s \n번호:%s\n\n",p[i]->name,p[i]->dob->month,p[i]->dob->day,p[i]->dob->year,
p[i]->adress,p[i]->email,p[i]->number);
}
};
printf("모든 결과값 출력완료\n\n");
}
void print()
{
while(1)
{
printf("출력을 원하는 매뉴를 선택하세요\n1.이름\n2.생년월일\n3.주소\n4.메일\n5.전화번호\n6.전체출력\n7.매뉴로\n");
scanf("%d",&printout);
if(printout==1)
{
printf("이름을 출력합니다\n");
for(i=0;i<num;i++){
printf("%d번 구조체\n",i);
printf("%s\n\n",p[i]->name);
}
}
else if(printout==2)
{
printf("생년월일을 출력합니다\n");
for(i=0;i<num;i++)
{
printf("%d번 구조체\n",i);
printf("%s %s %s\n\n",p[i]->dob->month,p[i]->dob->day,p[i]->dob->year);
}
}
else if(printout==3)
{
printf("주소를 출력합니다\n");
for(i=0;i<num;i++)
{
printf("%d번 구조체\n",i);
printf("%s\n\n",p[i]->adress);
}
}
else if(printout==4)
{
printf("메일을 출력합니다\n");
for(i=0;i<num;i++)
{
printf("%d번 구조체\n",i);
printf("%s\n\n",p[i]->email);
}
}
else if(printout==5)
{
printf("번호를 출력합니다\n");
for(i=0;i<num;i++)
{
printf("%d번 구조체\n",i);
printf("%s\n\n",p[i]->number);
}
}
else if(printout==6)
{
printf("전체구조체를 출력합니다\n");
for(i=0;i<num;i++)
{
printf("%d번 구조체\n\n이름:%s \n생년월일:%s %s %s \n주소:%s \n메일:%s \n번호:%s\n\n",i,p[i]->name,p[i]->dob->month,p[i]->dob->day,p[i]->dob->year,
p[i]->adress,p[i]->email,p[i]->number);
}
}
else if(printout==7)
{
break;
}
printf("\n모든 자료 출력\n\n");
}
}
void run()
{
num=0;
while(1)
{
printf("\n매뉴 선택하세요.\n1.입력\n2.검색\n3.출력\n4.삭제\n5.종료\n현재 구조체 개수 = %d\n\n", num);
scanf("%d",&menu);
if(menu==1)
{
input();
}
if(menu==2)
{
research();
}
if(menu==3)
{
print();
}
if(menu==4)
{
printf("\n삭제할 구조체가 포함한 단어를 입력하세요\n");
scanf("%s",&delname);
printf("\n삭제할 구조체의 정보는 다음과 같습니다\n");
for(i=0;i<num;i++)
{
if( (strcmp(p[i]->name,search)==0) || (strcmp(p[i]->dob->month,search)==0) || (strcmp(p[i]->dob->day,search)==0) ||
(strcmp(p[i]->dob->year,search)==0) || (strcmp(p[i]->adress,search)==0) || (strcmp(p[i]->number,search)==0) ||
(strcmp(p[i]->email,search)==0))
{
printf("이름:%s \n생년월일:%s %s %s \n주소:%s \n메일:%s \n번호:%s\n\n",p[i]->name,p[i]->dob->month,p[i]->dob->day,p[i]->dob->year,
p[i]->adress,p[i]->email,p[i]->number);
printf("삭제하시겠습니까? 1.예 2. 아니오\n");
scanf("%d",&yesorno);
if(yesorno==1)
{
for(j=i;j<num-1;j++)
{
list[j] = list[j+1];
}
num--;
break;
}
else
{
printf("매뉴로 이동합니다\n");
break;
}
}
}
if(menu == 5)
{
exit(1);
break;
}
}
}
}
int main(void)
{
run();
return 0;
}
기존에 배열형태로 출력하였던 구조체를 포인터를 선언하여
포린타 형태 ->로 바꿔서 컴파일 하려고 합니다.
따라서 포인터를 선언하고 모든 배열부분을 포린터형 ->으로
전환하였으나 컴파일 에러가 나네요.
포인터 선언부에 문제가 있는것 같은데 제가 가진 프린트애는 자세한 설명이 없어서 혹시 어떤 부분이 문제가 있는건지 궁금합니다
struct member *p;
struct member list[SIZE];
struct member *p = &list[SIZE];
list[SIZE].dob = &d;
포인터 선언부는 위와 같습니다
#include <stdio.h>
#include <stdlib.h>
#define SIZE 1000
struct date {
char month[20];
char day[20];
char year[20];
}d;
struct member{
char name[20];
struct date *dob;
char adress[20];
char email[20];
char number[20];
};
int menu,num,i,searchnumber,category,printout,j,yesorno;
struct member *p;
struct member list[SIZE];
struct member *p = &list[SIZE];
list[SIZE].dob = &d;
char search[20];
char delname[20];
void input(){
printf("이름을 입력하세요\n");
scanf("%s",p[num]->name);
printf("생년월일중 월을 입력하세요\n");
scanf("%s",p[num]->dob->month);
printf("생년월일중 일을 입력하세요\n");
scanf("%s",p[num]->dob->day);
printf("생년월일중 년을 입력하세요\n");
scanf("%s",p[num]->dob->year);
printf("주소를 입력하세요\n");
scanf("%s",p->[num]->adress);
printf("메일을 입력하세요\n");
scanf("%s",p[num]->email);
printf("전화번호를 입력하세요\n");
scanf("%s",p[num]->number);
num++;
}
void research(){
printf("검색할 단어를 입력하세요\n");
scanf("%s",search);
for(i=0;i<num;i++)
{
if( (strcmp(p[i]->name,search)==0) || (strcmp(p[i]->dob->month,search)==0) || (strcmp(p[i]->dob->day,search)==0) ||
(strcmp(p[i]->dob->year,search)==0) || (strcmp(p[i]->adress,search)==0) || (strcmp(p[i]->number,search)==0) ||
(strcmp(p[i]->email,search)==0))
{
printf("검색된 구조체의 정보는 다음과 같습니다\n\n");
printf("이름:%s \n생년월일:%s %s %s \n주소:%s \n메일:%s \n번호:%s\n\n",p[i]->name,p[i]->dob->month,p[i]->dob->day,p[i]->dob->year,
p[i]->adress,p[i]->email,p[i]->number);
}
};
printf("모든 결과값 출력완료\n\n");
}
void print()
{
while(1)
{
printf("출력을 원하는 매뉴를 선택하세요\n1.이름\n2.생년월일\n3.주소\n4.메일\n5.전화번호\n6.전체출력\n7.매뉴로\n");
scanf("%d",&printout);
if(printout==1)
{
printf("이름을 출력합니다\n");
for(i=0;i<num;i++){
printf("%d번 구조체\n",i);
printf("%s\n\n",p[i]->name);
}
}
else if(printout==2)
{
printf("생년월일을 출력합니다\n");
for(i=0;i<num;i++)
{
printf("%d번 구조체\n",i);
printf("%s %s %s\n\n",p[i]->dob->month,p[i]->dob->day,p[i]->dob->year);
}
}
else if(printout==3)
{
printf("주소를 출력합니다\n");
for(i=0;i<num;i++)
{
printf("%d번 구조체\n",i);
printf("%s\n\n",p[i]->adress);
}
}
else if(printout==4)
{
printf("메일을 출력합니다\n");
for(i=0;i<num;i++)
{
printf("%d번 구조체\n",i);
printf("%s\n\n",p[i]->email);
}
}
else if(printout==5)
{
printf("번호를 출력합니다\n");
for(i=0;i<num;i++)
{
printf("%d번 구조체\n",i);
printf("%s\n\n",p[i]->number);
}
}
else if(printout==6)
{
printf("전체구조체를 출력합니다\n");
for(i=0;i<num;i++)
{
printf("%d번 구조체\n\n이름:%s \n생년월일:%s %s %s \n주소:%s \n메일:%s \n번호:%s\n\n",i,p[i]->name,p[i]->dob->month,p[i]->dob->day,p[i]->dob->year,
p[i]->adress,p[i]->email,p[i]->number);
}
}
else if(printout==7)
{
break;
}
printf("\n모든 자료 출력\n\n");
}
}
void run()
{
num=0;
while(1)
{
printf("\n매뉴 선택하세요.\n1.입력\n2.검색\n3.출력\n4.삭제\n5.종료\n현재 구조체 개수 = %d\n\n", num);
scanf("%d",&menu);
if(menu==1)
{
input();
}
if(menu==2)
{
research();
}
if(menu==3)
{
print();
}
if(menu==4)
{
printf("\n삭제할 구조체가 포함한 단어를 입력하세요\n");
scanf("%s",&delname);
printf("\n삭제할 구조체의 정보는 다음과 같습니다\n");
for(i=0;i<num;i++)
{
if( (strcmp(p[i]->name,search)==0) || (strcmp(p[i]->dob->month,search)==0) || (strcmp(p[i]->dob->day,search)==0) ||
(strcmp(p[i]->dob->year,search)==0) || (strcmp(p[i]->adress,search)==0) || (strcmp(p[i]->number,search)==0) ||
(strcmp(p[i]->email,search)==0))
{
printf("이름:%s \n생년월일:%s %s %s \n주소:%s \n메일:%s \n번호:%s\n\n",p[i]->name,p[i]->dob->month,p[i]->dob->day,p[i]->dob->year,
p[i]->adress,p[i]->email,p[i]->number);
printf("삭제하시겠습니까? 1.예 2. 아니오\n");
scanf("%d",&yesorno);
if(yesorno==1)
{
for(j=i;j<num-1;j++)
{
list[j] = list[j+1];
}
num--;
break;
}
else
{
printf("매뉴로 이동합니다\n");
break;
}
}
}
if(menu == 5)
{
exit(1);
break;
}
}
}
}
int main(void)
{
run();
return 0;
}
[ ] 가 이미 포인터 연산자이기 때문에 화살표로 하려면 주소값을 기준으로 해야됩니다 foo[1].bar 또는 (foo+1)-> bar - return 0;
아니오->아니요 (응 아니의 높임 표현은 예 아니요임. 아니오는 그는 사람이 아니오. 와 같이 씀) [리듬 맞춤법 봇♬]