작성
·
476
·
수정됨
0
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct element { //여기에 이름 뜻
char name[100];
char mean[100];
}element;
typedef struct ListNode { //그리고 다음
element data;
struct ListNode* link;
}ListNode;
void error(char* message) {
fprintf(stderr, "%s\n", message);
exit(1);
}
void displaymenu()
{
printf("\n*** 단어 사전 ***\n");
printf("(1) 추가\n");
printf("(2) 삭제\n");
printf("(3) 출력\n");
printf("(4) 종료\n");
printf("---------------\n");
printf("선택하세요 : ");
}
ListNode* search_mean(ListNode* head, element x) {
ListNode* searched = head;
printf("뜻을 찾을 단어 : ");
scanf("%s", x.name);
while (searched != NULL) {
if (x.name==searched->data.name) {
return searched->data.mean;
}
else {
return NULL;
}
}
return head;
}
ListNode* insert_new(ListNode* head) {
element value;
element data;
ListNode* p = (ListNode*)malloc(sizeof(ListNode));
data = p->data;
ListNode* pre;
printf("단어 : ");
scanf("%s", value.name);
printf("뜻 : ");
scanf("%s", value.mean);
if (head == NULL || strcmp(p->data.name, value.name) > 0) {
p->link = head;
head = p;
}
else {
pre = search_mean(head, value);
p->link = pre->link;
pre->link = p;
}
return head;
}
ListNode* delete_new(ListNode* head) {
element value;
ListNode* p = head;
ListNode* removed;
printf("삭제할 단어 : ");
scanf("%s", value.name);
if (p->link == NULL) {
return NULL;
}
else {
while (p->link != NULL) {
if (p->link->data.name == value.name) {
removed = p->link;
p->link = p->link->link;
free(removed);
return;
}
p = p->link;
}
if (p->link == NULL) {
printf("없는 단어");
}
}
}
void print_list(ListNode* head) {
for (ListNode* p = head; p != NULL; p = p->link) {
printf("단어 : %s, 뜻 : %s\n", p->data.name, p->data.mean);
}
printf("\nNULL");
}
int main(void) {
ListNode* head = NULL;
int menu;
while (1) {
displaymenu();
scanf("%d", &menu);
switch (menu) {
case 1: //추가
head = insert_new(head);
break;
case 2: //삭제
head = delete_new(head);
break;
case 3: //출력
print_list(head);
break;
case 4: //종료
printf("프로그램 종료\n");
break;
}
if (menu == 4) {
break;
}
}
return 0;
}
문자 추가 후 문자열 출력 과정에서 계속해서 쓰레기 값이 발생하는데 어떤 부분이 문제인지 잘 모르겠습니다. 혹시 입력이나 출력 함수만의 문제가 아닐수도 있어 전체 코드 첨부합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
입력 함수와 출력 함수의 문제는 아닙니다.
문제는 문자열 비교 함수인 strcmp()를 사용하는 방법입니다.
strcmp() 함수는 문자열이 같으면 0을 반환하고 같지 않으면 양수 또는 음수를 반환합니다.
따라서 x.name과 searched->data.name을 비교할 때는 strcmp() 함수를 사용해야 합니다.
if (strcmp(x.name, searched->data.name) == 0) {
return &(searched->data.mean);
}
위와 같이 수정하면 됩니다.