char * 변형 4번째 문제
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct Student {
//char name[10];
char * name;
int kor, eng, math, sum, rank;
}ST;
int input(const char * msg);
void setData(ST * pt, int su);
void setRank(ST * pt, int su);
void disp(ST * pt, int su);
char * inputName();
void deleteSpace(ST * pt, int su);
int main(void) {
int su = input("학생 수");
//ST * pt = (ST *)malloc(sizeof(ST) * su);
ST * pt = new ST[su];
setData(pt, su);
disp(pt, su);
//free(pt);
deleteSpace(pt, su);
return 0;
}
int input(const char * msg) {
int su;
printf("%s 입력 : ", msg);
scanf_s("%d", &su);
getchar();
return su;
}
void setData(ST * pt, int su) {
printf("####정보 입력####\n");
for (int i = 0; i < su; i++) {
printf("%d번째 학생 정보\n", i + 1);
//printf("이름 입력 : ");
//scanf_s("%s", pt[i].name, sizeof(pt[i].name));
//gets_s(pt[i].name, sizeof(pt[i].name));
pt[i].name = inputName();
pt[i].kor = input("국어 점수");
pt[i].eng = input("영어 점수");
pt[i].math = input("수학 점수");
pt[i].sum = pt[i].kor + pt[i].math + pt[i].eng;
}
setRank(pt, su);
}
void setRank(ST * pt, int su) {
for (int i = 0; i < su; i++) {
pt[i].rank = 1;
for (int j = 0; j < su; j++) {
if (pt[i].sum < pt[j].sum) {
pt[i].rank++;
}
}
}
}
void disp(ST * pt, int su) {
printf("이름\t국어\t영어\t수학\t총점\t순위\n");
for (int i = 0; i < su; i++) {
printf("%s\t%d\t%d\t%d\t%d\t%d\n", pt[i].name, pt[i].kor, pt[i].eng, pt[i].math, pt[i].sum, pt[i].rank);
}
}
char * inputName() {
char name[20];
printf("이름 입력 : ");
gets_s(name, sizeof(name));
char * pt = (char *)malloc(strlen(name) + 1);
strcpy_s(pt, strlen(name) + 1, name);
return pt;
}
void deleteSpace(ST * pt, int su) {
for (int i = 0; i < su; i++) {
free(pt[i].name);
}
free(pt);
}
참고자료
kg아이티뱅크학원 (자료구조 수업)
[동적할당을 이용한 문자열 처리]{https://m.blog.naver.com/PostView.nhn?blogId=kgsshow1994&logNo=140171859874&proxyReferer=https%3A%2F%2Fwww.google.com%2F}