자료구조(8)_char*변형 문제 답안

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}

0%