반응형

C++ 기초 플러스 4판 7장 함수 : 프로그래밍연습 8번


#include <iostream>
using namespace std;

const int SLEN = 30;

struct student{
 char fullname[SLEN];
 char hobby[SLEN];
 int ooplevel;
};

int getinfo(student pa[], int n);
void display1(student st);
void display2(const student * ps);
void display3(const student pa[], int n);

int main()
{
    cout << "How many student : ";
    int class_size;
    cin >> class_size;
    while (cin.get() != '\n')
        continue;
 
    student * ptr_stu = new student[class_size];
    int entered = getinfo(ptr_stu, class_size);

    for (int i = 0; i < entered; i++)
    {
        display1(ptr_stu[i]);
        display2(&ptr_stu[i]);
  cout << endl;
    }
    display3(ptr_stu, entered);
    cout << "exit\n";


 delete []ptr_stu;
    return 0;
}

// getinfo()는 두 개의 전달인자를 취한다. 하나는 student 구조체
// 배열의 첫 번째 원소를 지시하는 포인터이고, 다른 하나는
// 그 배열의 원소 수를 나타내는 int 값이다. 이 함수는 학생들과
// 관련된 데이터를 요구하여 배열에 저장하고, 배열이 다 찼거나
// 학생 이름에 빈 줄이 입력되면 종료된다. 이 함수는 배열의
// 실제로 채워진 원소 수를 리턴한다.
int getinfo(student pa[], int n){
 for(int i = 0; i < n ; i++){
  cout << i+1 << ". what's your name? : ";
  cin.get(pa[i].fullname, SLEN);  // 개행문자를 확인해야하므로,
          // 개행문자까지 받아들이는 cin.get 사용
  if( pa[i].fullname[0] == 0 ) break;  // 개행문자면 그냥(빈줄) 루프종료하고,
  
  cout << i+1 << ". what's your hobby? : ";
  cin >> pa[i].hobby;
  cout << i+1 << ". what's your ooplevel? : ";
  cin >> pa[i].ooplevel;

  cin.get(); // 다음번에 cin.get이 실행될때 정상적으로 돌기위해
 }  

 return i;
}

// display1()은 student 구조체를 전달인자로 취하며
// 그 구조체의 내용을 출력한다
void display1(student st){
 cout << "값 : name : " << st.fullname
  << "  hobby : " << st.hobby
  << "  ooplevel : " << st.ooplevel
  << "\n";
}

// display2()는 student 구조체의 주소를 전달인자로 취하며
// 그 구조체의 내용을 출력한다
void display2(const student * ps){
 cout << "주소 : name : " << ps->fullname
  << "  hobby : " << ps->hobby
  << "  ooplevel : " << ps->ooplevel
  << "\n";

}

// display3()은 student 구조체 배열의 첫 번째 원소의 주소와
// 배열의 원소 수를 전달인자로 취하며, 구조체들의 내용을 출력한다
void display3(const student pa[], int n){
 for(int i = 0 ; i < n ; i ++){
  cout << i+1 << ". name : " << pa[i].fullname
   << "  hobby : " << pa[i].hobby
   << "  ooplevel : " << pa[i].ooplevel
   << "\n";
 }
 
}

 

 

반응형
Posted by Rainfly
l