기타

구조체가 담긴 배열의 포인터

swchung09 2025. 4. 15. 09:39

구조체로 학생의 학번, 이름, 생년월일(정수6개)를 저장하는 구조체를 생성한 후, 구조체를 배열로 만들고, 그 구조체 배열
의 주소를 저장하는 포인터 변수를 통해 구조체 배열에 접근하여 원하는 학생 수 만큼 정보를 입력받고 출력하는 코드


이 문제는 복잡해보이지만, 해결 방법이 어렵지 않다.

기본 라이브러리를 불러온다.

#include <stdio.h>

이제 struct를 생성한다. struct에는 학번과, 이름, 생년월을을 저장해야 한다.

struct student{
    int student_num, birthday;
    char name[1000];
}

이제 scanf로 학생 수를 입력 받고, VLA문법으로 배열과 포인터를 생성한다.

int n;
scanf("%d", &n);
struct student info[n];
struct student* info_p = info;

이제 for문으로 학생 정보를 입력받는다. 이때 인덱스를 사용하지 않는 방법으로 포인터에 값을 증가시키면 인덱스와 같은 역할을 할 수 있다는 것을 이용했다.

for (int i = 0; i < n; i++){
    printf("학변 : ");
    scanf("%d", &((info_p+i) -> student_num));
    printf("이름 : ");
    scanf("%s", (info_p+i) -> name);
    printf("생년월일 : ");
    scanf("%d", &((info_p+i) -> birthday));
}

for문으로 저장된 정보를 출력하면 된다.

for (int i = 0; i < n; i++){
    printf("%d/%d번째 학생 정보 ", i, n-1);
    printf("학번 : %d ", (info_p+i) -> student_num);
    printf("이름 : %s ", (info_p+i) -> name);
    printf("생년월일 : %06d\n", (info_p+i) -> birthday);
}

최종 코드

#include <stdio.h>

struct student{
    int student_num, birthday;
    char name[1000];
};
int main(void){
    int n;
    scanf("%d", &n);
    struct student info[n];
    struct student* info_p = info;
    for (int i = 0; i < n; i++){
        printf("학번 : ");
        scanf("%d", &((info_p+i) -> student_num));
        printf("이름 : ");
        scanf("%s", (info_p+i) -> name);
        printf("생년월일 : ");
        scanf("%d", &((info_p+i) -> birthday));
    }
    for (int i = 0; i < n; i++){
        printf("%d/%d번째 학생 정보 ", i, n-1);
        printf("학번 : %d ", (info_p+i) -> student_num);
        printf("이름 : %s ", (info_p+i) -> name);
        printf("생년월일 : %06d\n", (info_p+i) -> birthday);
    }
    return 0;
}

'기타' 카테고리의 다른 글

별찍기 with 숫자  (0) 2025.05.26
별찍기  (0) 2025.05.26
우분투, SSH  (0) 2025.05.14
Git, Github  (3) 2025.05.07
2차원 배열 이동 문제  (0) 2025.04.08