좋은질문

C언어 자료구조 구조체 문제입니다.

JustineBaek 2014. 9. 22. 00:54

 

 

 

문제)

함수안 메모리 할당의 반환을 이용 각 3명의 학생의 이름과 학번 그리고 취미를 저장, 출력하는 프로그램을 작성하시오.

구조체를 사용하여 메모리 할당을 반환하시오.

 

typedef struct student_tag{

int ID;

char name[32];

char hobby[128];

 

}student;

 

위에껄 기반으로 짜는건데 감이 안잡히고 영 모르겠어서..

좀 알려주세요 ㅠㅠ

 

 

 

 

안녕하세요?


1. 아래와 같이 구현해 보았습니다.

 

2. 핵심은 동적메모리 할당, 포인터를 이용한 구조체 접근등 입니다.

 

#include <stdio.h>
#include <stdlib.h>

 

// 구조체 정의

typedef struct student_tag{
     int ID;
     char name[32];
     char hobby[128];
} student;

 

// 함수헤더

student* SaveStudents(int count);
void PrintStudents(student* ptrStudent, int count);

 

int main()
{
     int number = 3;

 

     // 요청만큼의 학생정보가 담긴 구조체 배열 반환
     student* ptrStudent = SaveStudents(number);

 

     // 입력된 학생카드 출력
     PrintStudents(ptrStudent, number);

 

     // 리소스 해제
     free(ptrStudent);

 

     return 0;
}


// 학생카드를 저장합니다.
student* SaveStudents(int count)
{

 

     // 구조체 배열을 동적으로 메모리 할당
     student* students = (student*)malloc(sizeof(student) * count);

     printf("--------------------------------\n");
     printf("%d명의 학생 기록를 입력하세요. \n", count);
     printf("--------------------------------\n");

 

     // 포인터 연산으로 구조체 접근 (students + loop)->
     for(int loop = 0; loop < count; loop++)
     {
          // ID 자동부여
          (students + loop)->ID = loop + 1;
          printf("ID: %d \n", (students + loop)->ID);

 

          // 이름
          printf("이름: ");
          scanf("%s", (students + loop)->name);

 

          // 취미
          printf("취미: ");
          scanf("%s", (students + loop)->hobby);

         

          printf("\n");
     }

 

     // 할당받은 구조체 배열의 포인터 반환
     return students;   
}

 

// 학생카드를 출력합니다.
void PrintStudents(student* ptrStudent, int count)
{
     printf("\n\n\n");
     printf("--------------------------------\n");
     printf("학생카드 \n");
     printf("--------------------------------\n");

 

     for(int loop = 0; loop < count; loop++)
     {
          printf("id      : %d \n", (ptrStudent + loop)->ID);
          printf("name : %s \n", (ptrStudent + loop)->name);
          printf("hobby: %s \n", (ptrStudent + loop)->hobby);
          printf("\n\n");
     }

     printf("\n\n\n");
}

 

도움이 되시길 바랍니다.

감사합니다.

 

 

 

written by

  

legend

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C과외/C#과외/VB과외 프로그래밍 과외.서울인천경기-방문강의.기타전국-화상강의.제대로 체계적으로 배우고싶은분들.15년경력 프리랜서.삼성/포스코/한진 등.

서울,인천,경기,분당,일산,과천,산본,부천,부평,평촌,안산,안양,광명,용인,시흥,성남,수원,평택,오산,화성,동탄,천안,아산,

c#프로그래밍1:1과외, 15년 이상 프로젝트 경력의 프리랜서 직접 강의,

c#프로그래밍 과외, c#프로그래밍교육, IT·컴퓨터·컴퓨터과외비·프로그래밍과외, c# 강좌, c# 프로그래밍,

데이터베이스, 데이터베이스 프로그래밍, db, DB, 과외비,컴퓨터1:1,컴퓨터개인지도,컴퓨터실무과외,컴퓨터과외,컴퓨터1:1과외,

서울,인천,경기,부천,안산,분당,일산,천안,과천,산본,안양,광명,평촌,수원,평택,오산,용인,부평,시흥,성남,화성,동탄

광주,부산,대구,대전,마산,창원,울산,전주,군산,원주,강릉,충청남도,충청북도,강원도,경상남도,경상북도,전라남도,전라북도,제주도