2023.02.19 최초 작성
구조체를 만들어 사용하면 관련 있는 데이터를 묶어 관리할 수 있다.
아래는 코드는 구조체 포인터를 이용한 동적할당과 함수를 사용한 예이다.
이렇게 코드를 짜면 함수는 구조체 데이터와 별개이지만 의존적인 구조가 되므로 좋은 구조가 아니다.
#include <iostream>
using namespace std;
#define S_CNT 3
typedef struct Student {
char name[10];
int kor;
int eng;
int math;
} stu;
// 데이터에 의존적인 함수
void printStudent(stu* s) {
cout << "----------------------" << endl;
cout << "학생 이름 : " << s->name << endl;
cout << "국어 점수 : " << s->kor << endl;
cout << "영어 점수 : " << s->eng << endl;
cout << "수학 점수 : " << s->math << endl;
}
int main() {
stu s1({ "Kim", 100,90,80 });
stu s2({ "Lee", 90,85,97 });
stu s3({ "Park", 77,88,99 });
printStudent(&s1);
printStudent(&s2);
printStudent(&s3);
stu* students = new stu[S_CNT];
for (int i = 0; i < S_CNT; i++) {
cout << i + 1 << "번째 학생의 이름 입력 : ";
cin >> (students + i)->name;
cout << i + 1 << "번째 학생의 국어점수 입력 : ";
cin >> (students + i)->kor;
cout << i + 1 << "번째 학생의 영어점수 입력 : ";
cin >> (students + i)->eng;
cout << i + 1 << "번째 학생의 수학점수 입력 : ";
cin >> (students + i)->math;
}
for (int i = 0; i < S_CNT; i++) {
cout << i + 1 << "번째 학생의 이름 : " << students[i].name << endl;
cout << i + 1 << "번째 학생의 국어점수 : " << students[i].kor << endl;
cout << i + 1 << "번째 학생의 영어점수 : " << students[i].eng << endl;
cout << i + 1 << "번째 학생의 수학점수 : " << students[i].math << endl;
}
delete[] students;
return EXIT_SUCCESS;
}
[실행 결과]
----------------------
학생 이름 : Kim
국어 점수 : 100
영어 점수 : 90
수학 점수 : 80
----------------------
학생 이름 : Lee
국어 점수 : 90
영어 점수 : 85
수학 점수 : 97
----------------------
학생 이름 : Park
국어 점수 : 77
영어 점수 : 88
수학 점수 : 99
1번째 학생의 이름 입력 : aaa
1번째 학생의 국어점수 입력 : 11
1번째 학생의 영어점수 입력 : 22
1번째 학생의 수학점수 입력 : 33
2번째 학생의 이름 입력 : bbb
2번째 학생의 국어점수 입력 : 44
2번째 학생의 영어점수 입력 : 55
2번째 학생의 수학점수 입력 : 66
3번째 학생의 이름 입력 : ccc
3번째 학생의 국어점수 입력 : 77
3번째 학생의 영어점수 입력 : 88
3번째 학생의 수학점수 입력 : 99
1번째 학생의 이름 : aaa
1번째 학생의 국어점수 : 11
1번째 학생의 영어점수 : 22
1번째 학생의 수학점수 : 33
2번째 학생의 이름 : bbb
2번째 학생의 국어점수 : 44
2번째 학생의 영어점수 : 55
2번째 학생의 수학점수 : 66
3번째 학생의 이름 : ccc
3번째 학생의 국어점수 : 77
3번째 학생의 영어점수 : 88
3번째 학생의 수학점수 : 99