#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <string.h>
#define MAX 5
#define COL 3 //연락처별 항목수
/*
배열 전달 시에는 주소를 이용한다.
배열 포인터 : 배열을 가리킨다.
2차 배열의 요소는 1차원 배열임을 꼭 암기
*/
list(char (*contact)[COL][80]) //배열포인터 //char contact[][80]으로 표현해도 됨
{
int i;
char *name,*mail,*phone;
printf("번호: 이 름 : 이메일 : 전 화 : n");
for(i=0;i<5;i++)
{
name = contact[i][0]; //i번 연락처
mail = contact[i][1]; //
phone = contact[i][2]; //
printf("[%d][ %s ][ %s ][ %s ]n",i,name,mail,phone);
}
}
insert(char (*contact)[80]) //추가시킬 부분 하나만 가져오면 되므로 1차 배열 contact[]라고 해도됨
{ //입력 //[3][80]
char *name,*mail,*phone;
name = &contact[0];
mail = &contact[1];
phone = &contact[2]; //[0]번 배열 시작 주소
printf("Write Name : ");
gets(name);
printf("Write Mail : ");
gets(mail);
printf("Write Phone : ");
gets(phone);
} //0번부터 차례대로 입력
view(char (*contact)[80]) //[3][80]
{ //선택 출력
char *name,*mail,*phone;
name = &contact[0];
mail = &contact[1];
phone = &contact[2];
printf("연락처 출력n");
printf("Name [ %s ]n",name);
printf("Mail [ %s ]n",mail);
printf("Phone [ %s ]n",phone);
}
edit(char (*contact)[80]) //수정하려는 연락처 하나만 선택하면 되므로
{ //수정 - 선택
char *name,*mail,*phone;
char buf[3][80] = {0};
int i;
name = &contact[0];
mail = &contact[1];
phone = &contact[2]; //이름이 저장된 주소
printf("Name ( %s ) -> ",name);
gets(buf[0]);
printf("Mail ( %s ) -> ",mail);
gets(buf[1]);
printf("Phone ( %s ) -> ",phone);
gets(buf[2]);
for(i=0;i<3;i++) //실제로 수정이 이루어지는 부분
{
if(buf[i][0])
{
strncpy(contact[i], buf[i], sizeof(contact[i]-1)); //buf에 있는 문자열을 phone에 대입해라
//여기서 배열크기인 sizeof(phone)로 안했냐면 마지막에 NULL문자가 들어가야 하므로 안그러면 깨질수도 있다.
}
}
}
select(char (*contact)[3][80],
void (*callback)(char (*contact)[80])) //조회 //contact[][80]라고 해도 됨
{
int no;//찾아야되니까 전체인 2차원배열 모두를 불러와야 된다.
printf("Contact no: : ");
scanf("%d",&no);
fflush(stdin);
if( strlen( contact[no][0] ) ) //연락처 이름이 저장된 배열명
{
callback(contact[no]); //2차원 배열의 이름
}else{ //예외 처리
printf("등록되지 않은 연락처 입니다.n");
}
//no번 연락처를 전달(&[no][3][80]
}
main()
{
char contact[MAX][3][80] ={" "}; //이름 5개 80바이트짜리
int seq = 0;
int run = 1;
while(run)
{
system("cls");
list(contact);
printf("New View Edit eXitn");
switch(getch()) //화면에 뭘 눌렀는지 안보인다.(n도 버퍼에 안남는다)
{
case 'N': case'n':
if( seq == 5 )
{
printf("메모리가 부족합니다.n");
break;
}
insert(contact[seq]);
seq++;
break;
case 'V': case'v':
select(contact, view); //선택된 연락처 출력 ,콜백
break;
case 'E': case'e':
select(contact, edit); //선택된 연락처 수정 ,콜백
break;
case 'X': case'x':
run = 0;
break;
}
printf("확인");
getch();
// list(contact); //list한테 연락처가 저장된 배열의 시작주소를 알려주면 list가 출력해 준다
}
//정리
}
이렇게 번호부를 만들었는데
1>c:documents and settingsbitacademymy documentsvisual studio 2008projects오전장티마지막마지막end.c(134) : warning C4047: '함수' : 'int'의 간접 참조 수준이 'char [5][3][80]'과(와) 다릅니다.
1>c:documents and settingsbitacademymy documentsvisual studio 2008projects오전장티마지막마지막end.c(134) : warning C4024: 'select' : 형식 및 실제 매개 변수 1의 형식이 서로 다릅니다.
1>c:documents and settingsbitacademymy documentsvisual studio 2008projects오전장티마지막마지막end.c(134) : warning C4047: '함수' : 'fd_set *'의 간접 참조 수준이 'int (__cdecl *)(char (*)[80])'과(와) 다릅니다.
1>c:documents and settingsbitacademymy documentsvisual studio 2008projects오전장티마지막마지막end.c(134) : warning C4024: 'select' : 형식 및 실제 매개 변수 2의 형식이 서로 다릅니다.
1>c:documents and settingsbitacademymy documentsvisual studio 2008projects오전장티마지막마지막end.c(134) : error C2198: 'select' : 호출에 매개 변수가 너무 적습니다.
1>c:documents and settingsbitacademymy documentsvisual studio 2008projects오전장티마지막마지막end.c(137) : warning C4047: '함수' : 'int'의 간접 참조 수준이 'char [5][3][80]'과(와) 다릅니다.
1>c:documents and settingsbitacademymy documentsvisual studio 2008projects오전장티마지막마지막end.c(137) : warning C4024: 'select' : 형식 및 실제 매개 변수 1의 형식이 서로 다릅니다.
1>c:documents and settingsbitacademymy documentsvisual studio 2008projects오전장티마지막마지막end.c(137) : warning C4047: '함수' : 'fd_set *'의 간접 참조 수준이 'int (__cdecl *)(char (*)[80])'과(와) 다릅니다.
1>c:documents and settingsbitacademymy documentsvisual studio 2008projects오전장티마지막마지막end.c(137) : warning C4024: 'select' : 형식 및 실제 매개 변수 2의 형식이 서로 다릅니다.
1>c:documents and settingsbitacademymy documentsvisual studio 2008projects오전장티마지막마지막end.c(137) : error C2198: 'select' : 호출에 매개 변수가 너무 적습니다.
이렇게 에러가뜨네요 원인좀 알려주세요 ㅠ
댓글 0