DeNup
30
2021-01-23 18:01:35
2
125

C 연결리스트 출력함수


안녕하세요! 

C언어에서 연결리스트 부분 공부중입니다. 

사람의 나이, 키, 몸무게를 원하는 만큼 넣는것은 함수화 했는데, 출력하는걸 함수화하지 못해서 고민입니다. 


#include <stdio.h>
#include <malloc.h>

typedef struct info
{
    unsigned short int age;
    float height;
    float weight;
    struct info *p_next;

} INFO;

void AddInfo(INFO **qq_head, INFO **qq_tail, unsigned short int age,
             float height, float weight);

/* void PrintfInfo(INFO *qq_head);*/

void main()
{
    INFO *p_head = NULL, *p_tail = NULL, *p;
    unsigned short age;
    float height, weight;
    char count = 0;
    char go = 0;

    while (1)
    {
        printf("input datas (1:go | else:stop) :");
        scanf("%d", &go);
        if (1 == go)
        {

            printf("%dth age :", count + 1);
            scanf("%hu", &age);

            printf("%dth height : ", count + 1);
            scanf("%f", &height);

            printf("%dth weight : ", count + 1);
            scanf("%f", &weight);

            AddInfo(&p_head, &p_tail, age, height, weight);
            count++;
        }
        else
        {
            break;
        }
    }
    count = 0;
    p = p_head;
    while (NULL != p)
    {
        printf("====%dth person====\n", count + 1);
        printf("age : %d\n", p->age);
        printf("height : %5.2f\n", p->height);
        printf("weight : %5.2f\n", p->weight);
        p = p->p_next;
        count++;
    }
    printf("====================\n");
}

void AddInfo(INFO **qq_head, INFO **qq_tail,
             unsigned short int age, float height, float weight)
{
    if (NULL != *qq_head)
    {
        (*qq_tail)->p_next = (INFO *)malloc(sizeof(INFO));
        *qq_tail = (*qq_tail)->p_next;
    }
    else
    {
        *qq_head = (INFO *)malloc(sizeof(INFO));
        *qq_tail = *qq_head;
    }

    (*qq_tail)->age = age;
    (*qq_tail)->height = height;
    (*qq_tail)->weight = weight;
    (*qq_tail)->p_next = NULL;
}

/* void PrintfInfo(INFO *qq_head)
{
    char count = 0;
    while (NULL != qq_head)
    {
        printf("====%dth person====\n", count + 1);
        printf("age : %d\n", qq_head->age);
        printf("height : %5.2f\n", qq_head->height);
        printf("weight : %5.2f\n", qq_head->weight);
        qq_head = qq_head->p_next;
        count++;
    }
    printf("====================\n");
}
*/


이 코드에서 PrintfInfo 함수를 만들어서 하려고 했는데...생각처럼 잘 되지 않았습니다. 

함수를 어떻게 구성해야 좋을까요? 

감사합니다.

0
  • 답변 2

  • DaYoon
    122
    2021-01-23 19:26:41 작성 2021-01-23 19:29:24 수정됨

    1. PrintInfo  써보니까 되는데, 어떤 부분이 안 되시죠? 

    2.  go 를 char 로 선언하시고 scanf 에선 go에 %d 로 받으시는데 %d는 int 용입니다. 아무거나 쓰시면 프로그램 실행 중에 예외적인 입력이 들어오면 문제 생길 수 있습니다.

    3. count 를 char 로 선언하시고 count++ 로 값을 1씩 증가시키시려는것 같은데, 그러려면 char가 아닌 int 같은걸로 선언하셔야 합니다.

    4. 이전에도 stack 관련해서 질문하신 것을 봤는데 거기서 stack을 구현하신거나 여기서 연결리스트 구현하신거나 이상한 방식으로 하고 계십니다. 교재를 하나 구해서 잘하는 사람이 하는 방식대로 배우는게 좋습니다.

  • DeNup
    30
    2021-01-24 10:40:06

    PrintfInfo(p_head); 이렇게 대입하니까 문제가 없네요 ㅎㅎ

    *p_head로 하려고해서 오류가 있었나봅니다. 

    매개변수와 입력변수 관계가 계속 헷갈리네요 ㅎㅎ

  • 로그인을 하시면 답변을 등록할 수 있습니다.