c 언어 포인터와 구조체 질문 입니다.

익명 사용자의 이미지

이런 글을 올려서 정말 죄송합니다.
근데 정말 정말 모르겠어서 글 올립니다.
대체 int person_list_length(person_t *list) 이 부분에
뭘 채워넣으라는 의미 인가요?
현재 상태에서 출력되 잘 되는데 말입니다.
이런 두서 없는 글 올려서 죄송합니다.
물어볼 곳이 없어서 올려봅니다.

#define TRUE 1
#define FALSE 0
 
typedef struct person_s {
    char    name[31];
    int     age;
    float   height;
 
    struct person_s *next;      // Next person on the list
} person_t;
 
 
void free_person_list(person_t *);
int person_list_length(person_t *);
 
person_t *read_person(int);
person_t *read_person_list();
 
/*
  Pretend to read a person from a file.  For the purposes of this
  program, we are passed in an int telling us which person is read.  We
  make up a fake person based on num, rather than actually reading
  from a file.
 */
 
person_t *read_person(int num) {
    if (num < 0 || num >= 3) {
        return NULL;        // Pretend it's end of file
    }
    person_t *result = (person_t *) malloc(sizeof(person_t));
    switch(num) {
        case 0:
            strcpy(result->name, "John");
            break;
        case 1:
            strcpy(result->name, "Chihiro");
            break;
        case 2:
            strcpy(result->name, "Merced");
            break;
        default:
            printf("PROGRAM ERROR, ABORTING!");
            exit(1);
    }
    result->age = 18 + num;
    result->height = 5 + 0.1f * num;
    return result;
}
 
/*
 * Pretend to read a list of person instances from a file
 */
person_t *read_person_list() {
    person_t *list;
    person_t **to_be_read = &list;
    int i = 0;
    while (TRUE) {
        person_t *to_add = read_person(i++);
        *to_be_read = to_add;
        if (to_add == NULL) {
            return list;
        }
        to_be_read = &((*to_be_read)->next);
    }
}
 
/*
 * Free a list of person entries
 */
void free_person_list(person_t *list) {
    while (list) {
        person_t *next = list->next;
        free(list);
        list = next;
    }
}
 
/*
  Return the number of person_t objects on the list
  that is passed in.
 */
int person_list_length(person_t *list) {
 
 
  /////여기에 정답을 넣어야만 합니다./////
 
 
}
 
 
 
int main() {
    person_t *person_list;
    person_list = read_person_list();
    int len = person_list_length(person_list);
    printf("person_list has %d person instances.\n", len);
    free_person_list(person_list);
}

raymundo의 이미지

코멘트에 있는 그대로, 인자로 받은 list에 있는 person_t 객체의 개수를 반환하는 코드를 작성하시면 되겠네요.

출력에 "person_list has ** person instances."에서 ** 자리에 정확한 숫자가 나오도록 말이죠. 지금 코드라면 3이 나와야겠네요.

좋은 하루 되세요!