게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
본삭금]C프로그랭 짠 프로그램 관련 질문입니다.
게시물ID : programmer_5425짧은주소 복사하기
작성자 : 라페밀리
추천 : 0
조회수 : 532회
댓글수 : 3개
등록시간 : 2014/09/14 17:42:44
옵션
  • 베스트금지
  • 본인삭제금지
#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* 선언된 그 함수의 지역포인터변수만 반환형에 쓸 수 있는건가요???

함수의 반환에서 포인터 형을 쓰는 부분에 대한 이해는 어떤식으로 하면 될까요?
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호