구조체로 학생의 학번, 이름, 생년월일(정수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 |