나의 코드
우선 간단히 코드를 짜봄.
#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아이티뱅크학원 (자료구조 수업)