#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT 3
struct Student
{
char *studentName;
int score;
};
struct Class
{
char *className;
struct Student students[MAX_STUDENT];
struct Student highScoreStudent;
};
void PrintClassInfo(struct Class class1)
{
int i;
printf("Class name : %s\n");
for(i=0;i<MAX_STUDENT;i++)
printf("%s : %d \n", class1.students[i].studentName, class1.students[i].score);
printf("High score student : %s, %d", class1.highScoreStudent.studentName, class1.highScoreStudent.score);
}
void FindHighScoreStudentInClass(struct Class *class1)
{
int score=0;
int i;
for(i=0;i<3;i++)
{
if(score< (*class1).students[i].score)
{
score=(*class1).students[i].score;
(*class1).highScoreStudent.studentName=(*class1).students[i].studentName;
(*class1).highScoreStudent.score=score;
}
}
}
char* FindHighScoreClassInTwoClass(struct Class class1[], int num) //
{
int i, n, score=0;
char* className=(char*)malloc(sizeof(char)*30);
for(i=0;i<num;i++)
{
for(n=0;n<MAX_STUDENT;i++)
{
if(score<class1[i].students[n].score)
{
score=class1[i].students[n].score;
strcpy(className, class1[i].className); //check and find out not using 'strcpy'
}
}
}
return className;
}
int main()
{
struct Class man[] = {
{"Class A", {{"A", 100},{"B", 80},{"C", 70}},},
{"Class A", {{"D", 80},{"E", 70},{"E", 99}},}
};
int i;
for(i=0;i<2;i++)
{
FindHighScoreStudentInClass(&man[i]);
PrintClassInfo(man[i]);
printf("\n------------------------\n");
}
printf("Where is the highest score student?\n %s \n", FindHighScoreClassInTwoClass(man, 2));
return 0;
}
여기서 문제는 실행을 하면 메인함수에서 마지막 리턴 전 printf 함수에서 불러오는 FindHighScoreClassINTwoClass에서 오류가 뜹니다.
컴파일에서는 문제가 없고 출력하는 당시에 메인함수에서 printf 함수 전까지는 잘 실행이 됩니다. (이 printf를 주석 처리했을 경우 잘 실행됩니다.)
우선 기본 전제가 메인함수는 건드려서 안되교 FindHighScoreClassINTwoClass 이 함수 내에서만의 작업으로만 최고점이 있는 학생의 클래스이름이 출력이 되어야 합니다.
혹시나 어떻게 저 함수를 만져야 할까요/?
char* FindHighScoreClassInTwoClass(struct Class class1[], int num) // strcpy를 쓰면 반환형 자체가 필요없는 것이 아닌가??
{
int i, n, score=0;
char* className=(char*)malloc(sizeof(char)*30);
for(i=0;i<num;i++)
{
for(n=0;n<MAX_STUDENT;i++)
{
if(score<class1[i].students[n].score)
{
score=class1[i].students[n].score;
strcpy(className, class1[i].className); //check and find out not using 'strcpy'
}
}
}
return className;
}
또한 이 함수에서 strcpy를 쓰지 않고 해결하는 방법이 있나요?
또 반환형이 char* 함수에 리턴하는 것은 어떤식으로 이해해야 하나요? char* 선언된 그 함수의 지역포인터변수만 반환형에 쓸 수 있는건가요???
함수의 반환에서 포인터 형을 쓰는 부분에 대한 이해는 어떤식으로 하면 될까요?