구조체 배열을 가르킬수있는 포인터 배열은 어떻게 선언하나요?
두동
질문 제목 : 구조체 배열을 가르킬수있는 포인터 배열은 어떻게 선언??포인터 배열이 구조체 배열의 주소값을 가르키게 하여
입력받은 숫자를 이용하여 구조체 배열의 값을 바꾸기 위함입니다.질문 내용 :
/*c99*/
/*재미 연습*/
#include stdio.h
#include stdlib.h
#include string.h
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main_title(void); //첫번째 선택문 (책을 새로넣는다 (0) 책을 검색한다 (1) 책을 대출한다 (2) 반납 (3) 종료(4) )
void book_edit(void); //책을 저장할 함수
void book_search(void); //책을 검색할 함수
void book_loans(void); //책을 대출할 함수
void book_return(void); //책을 반납할 함수
void book_print(int i,int k); //검색한 책을 모니터에 출력
void loans_initialization (void); //대출값을 초기화
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct book_main
{
char title[50]; //책의 이름
char author[30]; //책의 저자
char publisher[30]; //책의 출판사
int loans; // 대출 여부
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct book_main book[100]; //책이 들어갈 구조체 변수 //////////////★
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main (void)
{
int cnt = 0;
printf(|-----------------------------------------------------------------------------|\n);
printf(| |\n);
printf(| 도서 관리 프로그램 |\n);
printf(| |\n);
printf(| 주의 (맞지않은 다른 버튼을 누르실경우 어떻게 될지 저도 모릅니다.) |\n);
printf(| |\n);
printf(| |\n);
printf(| 책임감 없는 by.옴니아 |\n);
printf(|-----------------------------------------------------------------------------|\n);
loans_initialization ();
while(1)
{
puts();
cnt = main_title();
if(cnt == 0)
{
book_edit();
}
else if(cnt == 1)
{
book_search();
}
else if(cnt == 2)
{
book_loans();
}
else if(cnt == 3)
{
book_return();
}
else break;
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main_title(void)
{
int i = 0;
int j = 0;
do
{
j++;
printf(책을 넣는다 (0) 책을 검색한다 (1) 대출한다 (2) 반납한다 (3) 종료(4) = );
scanf(%d,&i);
if(i4 || i0)
{
printf(잘못 입력하셨습니다.\n);
j=0;
}
}while(j==0);
puts();
return i;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void book_edit(void)
{
int i;
int bok = 0;
static int kook = 0;
printf(책을 몆권 넣으시겠습니까? = );
scanf(%d,&bok);
for(i=0;ibok;i++)
{
printf(%d 번째 책의 이름 = ,kook+1);
scanf(%s,book[kook].title);
printf(%d 번째 책의 저자 = ,kook+1);
scanf(%s,book[kook].author);
printf(%d 번째 책의 출판사 = ,kook+1);
scanf(%s,book[kook].publisher);
puts();
kook++;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void book_search(void)
{
int i,k;
int g = 1;
int serch = 0;
int koko = 0;
char namid[30];
k=0;
printf(어느 정보를 이용해서 찾으시겠습니까? \n);
while(1)
{
printf(책의 이름(0) 책의 저자(1) 책의 출판사(2) = );
scanf(%d,&serch);
if(serch=3 && serch=0) break;
printf(잘못 입력하셨습니다.\n);
}
if(serch==0) //책의 이름
{
printf(찾고자 하는 책의 제목을 입력해주세요 = );
scanf(%s,namid);
for(i=0;i100;i++)
{
g=strncmp(book[i].title,namid,2);
if(g==0 && book[i].loans==0)
{
k++;
book_print(i,k);
puts();
koko++;
}
}
if(koko==0) printf(정보가 없습니다\n);
}
else if(serch==1) //책의 저자
{
printf(찾고자 하는 책의 저자을 입력해주세요 = );
scanf(%s,namid);
for(i=0;i100;i++)
{
g=strncmp(book[i].author,namid,2);
if(g==0 && book[i].loans==0)
{
k++;
book_print(i,k);
puts();
koko++;
}
}
if(koko==0) printf(정보가 없습니다\n);
}
else if(serch==2) //책의 출판사
{
printf(찾고자 하는 책의 출판사를 입력해주세요 = );
scanf(%s,namid);
for(i=0;i100;i++)
{
g=strncmp(book[i].publisher,namid,2);
if(g==0 && book[i].loans==0)
{
k++;
book_print(i,k);
puts();
koko++;
}
}
if(koko==0) printf(정보가 없습니다\n);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void book_print(int i,int k)
{
printf(%d. 제목:%s, 저자:%s, 출판사:%s,k,book[i].title,book[i].author,book[i].publisher);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void book_loans(void)
{
char da[30];
int i,j = 0;
int k = 0;
int koko = 0;
int g;
printf(대출하고자 하는 책의 제목을 입력해주세요 = );
scanf(%s,da);
for(i=0;i100;i++)
{
g=strcmp(book[i].title,da);
if(g==0 && book[i].loans==0)
{
k++;
book_print(i,k);
printf( 을[를] 대출하시겠습니까?\n yes(1)/no(0) = );
scanf(%d,&j);
if(j==1)
{
printf(대출 하셨습니다. \n);
book[i].loans = 1;
}
koko++;
}
j=0;
}
if(koko==0) printf(정보가 없습니다\n);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loans_initialization (void)
{
int i;
for(i=0;i100;i++)
{
book[i].loans = 0;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void book_return(void)
{
int i;
int cnt = 0;
int k = 0;
struct book_main *ptr[100]; /////////////★
printf(어떻게 반납하시겠습니까?\n);
printf(전부(1),일부(0) = );
scanf(%d,&cnt);
if(cnt==1)
{
loans_initialization ();
}
else
{
for(i=0;i100;i++)
{
if(book[i].loans == 1)
{
k++;
book_print(i,k);
puts();
(*ptr)[k]=book[i]; /////////////★
}
}
if(k==0)
{
printf(정보가 없습니다\n);
}
else
{
while(1)
{
printf(반납하고자 하는 책번호를 말하세요 그만 반납(0) = );
scanf(%d,&cnt);
if(cnt==0) break;
else (*ptr)[cnt].loans = 0; ///////////★
}
}
}
}
★ 친곳이 문제가 되는 부분인거 같은데요..
도무지 어떻게 하면 구조체 배열을 가르켜서 구조체 배열의 값을 바꿀지 모르겠네요
코드는 상당히 x같습니다..
그렇다고해서 다른 부분은 알려주시면 안되요..
다른 부분은 따로 수정을 가할예정이니
★친부분만 신경써주시길 부탁드립니다...
-
터전
자체 해결했습니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2698120 | -연산자 가 먼지 좀 알려주세요 (1) | 낮선검객 | 2025-06-14 |
2698091 | 길찾기문제 질문이요! | 노을빛 | 2025-06-13 |
2698060 | while 문에 대한 질문입니다. (9) | 물고기자리 | 2025-06-13 |
2698012 | 2~9가아닌수 | 아놀드 | 2025-06-13 |
2697980 | for에 gets함수를 넣으니까 왜 반복이 안되죠 ㅜ (2) | 펴라 | 2025-06-12 |
2697952 | 2차배열과 함수문의^^; | VanilLa | 2025-06-12 |
2697924 | 다차원 배열 질문있습니다 | 두동 | 2025-06-12 |
2697893 | 정올 :: 기초다지기 a9007 배열7 (문제가 이상함 -_-) | 흰두루 | 2025-06-12 |
2697862 | Unable......... 지정된 파일을 찾을 수 없습니다!! (1) | Creator | 2025-06-11 |
2697761 | 그러니까여제말은... (2) | 새론 | 2025-06-10 |
2697737 | 정올 문제좀 풀어보신분~ | 레오 | 2025-06-10 |
2697709 | rand함수 질문좀요! (6) | 가막새 | 2025-06-10 |
2697683 | C언어 변수뒤 표시가 이해안되는게 있습니다. | 소미 | 2025-06-10 |
2697660 | 껍데기딜 만들고 난후 어느핫키 누르면 코드검색이라도 뜨고 그다음 무반응 해결좀 (2) | 움찬 | 2025-06-09 |
2697634 | c언어로 감성사전 만들기! (1) | 도란도란 | 2025-06-09 |
2697605 | 이 함수좀... | agine | 2025-06-09 |
2697574 | 배열 기본적인질문 (3) | 민트향 | 2025-06-09 |
2697549 | 배열 초기화 (4) | 나리 | 2025-06-08 |
2697465 | 수다님...^^ (2) | 가론 | 2025-06-08 |
2697432 | 서버 만드는 함수에서 궁금한게있어요~ | 파랑 | 2025-06-07 |