공부하시는대에 도움이 됐으면 좋겠습니다.
답안코드 확인해주세요!
더보기
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
typedef struct {
char name[30];
char phone[20];
}
DATA;
typedef struct NODE {
DATA data;
struct NODE *link;
}
NODE;
NODE *search_pos(NODE *plist, char name[]);
NODE *search(NODE *plist, char name[]);
NODE *create_node(char *name, char* phone, NODE *link);
void insert_node(NODE **phead, NODE *node, NODE *prev);
void print_menu();
int main(void) {
char name_t[30]= {
'\0'
}
;
char phone_t[20]= {
'\0'
}
;
char cmenu=1;
int bEscape = FALSE;
NODE* List = NULL;
NODE* Temp = NULL;
while(TRUE) {
fflush(stdin);
print_menu();
printf("번호를 입력하세요 : ");
scanf("%c", &cmenu);
switch(cmenu) {
case '1':
break;
case '2':
printf("이름 : ");
scanf("%s", name_t);
printf("번호 : ");
scanf("%s", phone_t);
insert_node(&List, create_node(name_t, phone_t, NULL),
search_pos(List, name_t));
printf("추가되었습니다.\n");
break;
case '3':
printf("찾을 이름을 입력하세요 : ");
scanf("%s", name_t);
Temp = search(List, name_t);
if(Temp!=NULL) {
printf("전화 번호부를 찾았습니다.\n");
printf("이름 : %s\n번호 : %s\n", Temp->data.name,
Temp->data.phone);
} else
printf("데이터를 찾지 못했습니다.\n");
break;
case '4':
printf("찾을 이름을 입력하세요 : ");
scanf("%s", name_t);
Temp = search(List, name_t);
printf("변경할 이름을 입력하세요 : ");
scanf("%s", name_t);
printf("변경할 번호를 입력하세요 : ");
scanf("%s", phone_t);
strcpy(Temp->data.name, name_t);
strcpy(Temp->data.phone, phone_t);
printf("데이터가 변경되었습니다.\n");
break;
case '5':
bEscape = TRUE;
break;
default:
printf("잘못 입력 하셨습니다. 다시입력해주세요.\n");
break;
}
if(bEscape)
break;
}
return 0;
}
void print_menu() {
printf("------------------------------\n");
printf("1. 초기화\n");
printf("2. 전화 번호 추가\n");
printf("3. 전화 번호 탐색\n");
printf("4. 전화 번호 변경\n");
printf("5. 종료\n");
printf("------------------------------\n");
}
NODE *search_pos(NODE *plist, char name[]) {
NODE *curr, *prev;
prev = NULL;
curr = plist;
while(curr != NULL) {
if(strcmp(curr->data.name, name) > 0)
break;
prev = curr;
curr = curr->link;
}
return prev;
}
NODE *search(NODE *plist, char name[]) {
NODE *curr;
curr = plist;
while(curr != NULL) {
if(strcmp(curr->data.name, name) == 0)
break;
curr = curr->link;
}
return curr;
}
NODE *create_node(char *name, char* phone, NODE *link) {
NODE *new_node;
new_node = (NODE *)malloc(sizeof(NODE));
if( new_node == NULL ) {
fprintf(stderr, "메모리 할당 에러\n");
exit(1);
}
strcpy(new_node->data.name, name);
strcpy(new_node->data.phone, phone);
new_node->link = link;
return(new_node);
}
void insert_node(NODE **phead, NODE *node, NODE *prev) {
if( *phead == NULL ) {
*phead = node;
node->link = NULL;
} else if(prev == NULL) {
node->link = (*phead)->link;
(*phead) = node;
} else {
node->link = prev->link;
prev->link = node;
}
}
더 많은 C코드가 보고 싶다면?
댓글