자료구조(6) 문제(3)에 대한 나의 코드 / 고친 코드

나의 코드

우선 간단히 코드를 짜봄.

image

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//동적할당 / 구조체 배열
//입력 받은 수만큼 사람들의 정보를 입력 받아 나이 30세 이상만 출력하기
typedef struct data{
    char name[100];
    int age;
}Data;
int main(void){
    int count;
    printf("사람 수를 입력하세요\n");
    scanf("%d", &count);
    
    //pointer 배열을 선언하자
    
    Data *people[count];
    
    for (int i = 0; i < count; i++){
        people[i] =(Data *)malloc(sizeof(Data *)*count); // 메모리 할당
    }
    
    for( int i = 0; i < count; i++)
    {
        printf("%d번째 이름: ",i+1);
        //scanf_s("%s", people[i].name,sizeof(table[i].name));
        scanf("%s",people[i]->name);
        printf("\n");
        
        printf("%d번째 나이: ", i+1);
        scanf("%d", &people[i]->age);
        printf("\n");
    }
    
    for(int j = 0; j < count; j++){
        if(people[j]->age >= 30)
            printf("나이 30세 이상 회원:\n ");
        printf("%d번째 저장 정보 : 이름 %s, 나이  %d\n", j+1, people[j]->name, people[j]->age);
    }
    
    for (int i = 0; i < count; i++){
        free(people[i]);
    }
    return 0;
}
//이 코드의 오류 -> 네개를 입력했을 시, 나이가 씹히는 문제

수업시간에 원인 파악후 다시 짜봄

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//동적할당 / 구조체 배열
//입력 받은 수만큼 사람들의 정보를 입력 받아 나이 30세 이상만 출력하기
typedef struct data {
    char name[100];
    int age;
}Data;

int main(void) {
    int count;
    printf("사람 수를 입력하세요\n");
    scanf_s("%d", &count);

//pointer 배열을 선언하자

//Data *people[count];
    Data *people = NULL;

    people = (Data*)malloc(sizeof(Data*)*count); // 동적할당


for (int i = 0; i < count; i++)
{
    printf("%d번째 이름: ", i + 1);
    //scanf_s("%s", people[i].name,sizeof(table[i].name));
    scanf_s("%s", people[i].name ,sizeof(people[i].name));

    printf("%d번째 나이: ", i + 1);
    scanf_s("%d", &people[i].age);
}

for (int j = 0; j < count; j++) {
    if (people[j].age >= 30)
    printf("%d번째 저장 정보 : 이름 %s, 나이  %d\n", j + 1, people[j].name,  people[j].age);
}

for (int i = 0; i < count; i++) {
    free(people);
}
    return 0;
}

뭐가 헷갈렸지 ? 구조체를 동적할당함에 있어서 헷갈림. 직접 그려가면서 구조체를 차근차근 생각하자. 어렵게 생각하지말자.


참고자료

kg아이티뱅크학원 (자료구조 수업)

0%