구조체를 사용한 명함만드는 소스인데요..
매디
코드를 보시면 아시겠지만 명함만드는 소스입니다. 하루종일해서 겨우만들었는데 입력조회 다 되는데 삭제가 안되네요..
너무 오래 만들어서 그런지 오류가 보이지않습니다... 오류좀 찾아주세요..ㅠㅠ
#include stdio.h
#include string.h
#include stdlib.h
#define QUIT 5 //상수
//구조체 정의
typedef struct Namecard{
char name[20];
char tel[15];
char email[20];
struct Namecard *next;
}Namecard;
//함수 선언
int menu();//선택메뉴
void creatNode(Namecard *ptr); //노드생성
void freeNode(Namecard *node); //노드삭제(all)
void initNamecard(Namecard *Namecard); //개인정보입력
void printNode(Namecard *node );// 화면에 출력
void searchNamecard(Namecard *node);//사람찾기
Namecard *searchNode(Namecard *node, char ch[] );// ch값 찾기
//메인 함수
int main()
{
Namecard *sNode, *posi;
int choice=0;
FILE *fp;
sNode=(Namecard *)malloc(sizeof(Namecard));
sNode-next=NULL;
while(choice !=QUIT)
{
choice=menu();
switch(choice)
{
case 1: //입력
if(sNode-next==NULL)
{
creatNode( sNode );
posi = sNode-next;
}
else
{
creatNode( posi );
posi = posi-next;
}
break;
case 2:// 조회
searchNamecard( sNode );
break;
case 3:// 삭제
break;
case 4:// 출력
printNode( sNode-next );
break;
default:
break;
}
}
if( sNode != NULL )
freeNode( sNode );
}
//함수 정의
//메뉴 함수 반한값 : 정수
int menu()
{
int choice;
do
{
printf(========================\n);
printf(\t1. 입력\n);
printf(\t2. 조회\n);
printf(\t3. 삭제\n);
printf(\t4. 출력\n);
printf(\t%d. QUIT\n, QUIT);
printf(========================\n Choice : );
scanf(%d, &choice );
fflush(stdin);
}
while( choice 0 || choice QUIT );
return choice;
}
//creatNode()
//처음 데이터 입력시 node 생성 함수
//initNamecard()함수호출
//반한값 : 없음
void creatNode(Namecard *node)
{
Namecard *temp;
temp = (Namecard *)malloc(sizeof(Namecard));
initNamecard(temp);
temp-next = NULL;
node-next = temp;
}
// initNameard() 개인정보 입력
void initNamecard(Namecard *Namecard)
{
printf(\n\n========================\n);
printf(이름을 입력하세요\n : );
fflush(stdin);
gets(Namecard-name);
fflush(stdin);
printf(전화번호를 입력하세요\n : );
fflush(stdin);
gets(Namecard-tel);
fflush(stdin);
printf(E-mail를 입력하세요\n : );
fflush(stdin);
gets(Namecard-email);
printf(========================\n\n);
fflush(stdin);
}
//node 출력함수
//반환값 : 없음
void printNode(Namecard *node )
{
while( node-next != NULL )
{
printf(\n=========================\n);
printf( 이름 : %s\n, node-name );
printf( Tel : %s\n, node-tel );
printf(E-mail : %s\n, node-email );
printf(=========================\n\n);
node = node-next;
}
// 마지막
printf(\n=========================\n);
printf( 이름 : %s\n, node-name );
printf( Tel : %s\n, node-tel );
printf( E-mail : %s\n, node-email);
printf(=========================\n);
printf(\n);
}
//값의 위치를 찾는 함수
//(위치는 그값의 위치가 아닌 그 이전 위치)
//반환값 : node or NULL
Namecard *searchNode(Namecard *node, char ch[])
{
while( node-next != NULL )
{
if( strcmp(node-next-name, ch) == 0 )
{
return node;
}
node = node-next;
}
return NULL;
}
//searchNamecard()
//사람이름에 따른 조회함수
//함수내에서 searchNode()함수호출
void searchNamecard(Namecard *node)
{
char ch[20];
Namecard *temp;
printf(\n===============================\n);
printf( 찾는사람의 이름을 입력하세요\n : );
fflush(stdin);
scanf(%s, ch );
temp = searchNode( node, ch );
if( temp != NULL )// not empty
{
printf(\n===============================\n);
printf( 이름 : %s\n, temp-next-name );
printf( Tel : %s\n, temp-next-tel );
printf( E-mail : %s\n, temp-next-email );
printf(===============================\n);
}
else
{
printf(\n===============================\n);
printf( 찾는 사람이 없습니다. \n);
printf(===============================\n);
}
}
//node free 함수
void freeNode(Namecard *node)
{
if(node == NULL);
else {
freeNode(node-next);
free(node);
}
}
-
아빠몬
버그를 찾는 가장 좋은 방법은. 디버깅을 하는 것입니다.
ide툴(비쥬얼스투디오 등)을 이용해서 디버깅해서 한단계씩 진행해서 찾을 수 있습니다.
그러니 우선 디버깅하는 법을 배워 보세요~
저렇게 길게, 들여쓰기도 짧게 되어있어서 보기 힘든 소스를 봐 주는 사람은 없습니다.
수다님께서 그런 소스를 봐 줬다는것 조차도 고마워해야 할 판입니다.
간단한 코드는 디버깅하는 법을 배우면 묻지 않고도 해결 할 수 있습니다.
꼭, 디버깅하는 법을 배우세요.