C언어 문자열 출력에서 쓰레기 값 발생
조회수 52회
문자 추가 후 문자열 출력 과정에서 계속해서 쓰레기 값이 발생하는데 어떤 부분이 문제인지 잘 모르겠습니다. 혹시 입력이나 출력 함수만의 문제가 아닐수도 있어 전체 코드 첨부합니다. 해결 방법을 알려주시면 감사하겠습니다!
#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;
}
댓글 입력