C언어 문자열 출력에서 쓰레기 값 발생

조회수 251회

문자 추가 후 문자열 출력 과정에서 계속해서 쓰레기 값이 발생하는데 어떤 부분이 문제인지 잘 모르겠습니다. 혹시 입력이나 출력 함수만의 문제가 아닐수도 있어 전체 코드 첨부합니다. 해결 방법을 알려주시면 감사하겠습니다!

#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;
}
  • malloc 한 후에 0으로 초기화 해주세요 송치원 2023.5.11 23:54

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)