본문 바로가기

Programming/ C++

(C++) 성적 입/출력 프로그램

728x90
반응형

 picture from Shutterstock

C++로 성적 입/출력 프로그램을 만들었습니다.

포인터를 사용하고, 메모리 동적 할당을 사용하여 메모리를 할당하여 프로그램을 작성하였습니다.

 

(메인함수)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<iostream>
using namespace std;
 
void input(char *p_name, int *p_score, float *p_avg, int num);
void output(char *p_name, int *p_score, float *p_avg, int num);
 
int main() {
    int num = 0;
    int sel = 0;
    int *score = NULL//포인터의 초기화
    char *name = NULL;
    float *avg = NULL;
 
 
    
    //메인 반복문
    while (sel != 3) {
        cout << "무엇을 하시겠습니까?" << endl;
        cout << "1. 입력\t" << "2. 출력\t" << "3. 종료" << endl;
        cin >> sel;
        switch (sel) {
        case 1cout << "몇명의 성적을 입력하시겠습니까?" << endl;
                cin >> num;
                name = new char[num * 10];
                score = new int[num * 4];
                avg = new float[num];
                
             input(name, score, avg, num); break//정보 입력
            
        case 2: output(name, score, avg, num); break//정보 출력
 
        case 3delete []name; 
                delete []score; 
                delete []avg; 
                cout << "종료합니다" << endl
                exit(-1);
        
        defaultcout << "잘못된 입력입니다" << "\n" << endl;
        }
    }
 
}
 
cs

 

 

메인함수 부분입니다.

while문을 사용하여 sel의 입력이 3이 아닐때까지 반복하게 하였습니다.

 

case 1 : 1을 입력하게되면 몇명의 성적을 입력받을것인지 물어본 후

인원수(num)를 입력하게 되면 24~26번줄에서 동적 메모리 할당을 합니다.

그 후 28번줄에서 input(입력)으로 들어갑니다.

 

case 2 : 2를 입력하게 되면 output(출력)으로 들어갑니다.

 

case 3 : 32~34번줄에서 각 변수의 메모리를 해제하고 종료합니다.

 

defalut : 그 외에 숫자를 입력하게 되면 "잘못된 입력입니다"라고 메세지를 출력 한 후 다시 while문의 처음으로 돌아갑니다.

 

 

(입력함수)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void input(char *p_name, int *p_score, float *p_avg, int num) { //정보 입력
    for (int i = 0; i < num; i++) {
        cout << "이름을 입력하세요" << endl;
        cin >> p_name ;
        p_score[3= 0;
        for (int j = 0; j < 3; j++) {
            cout << "성적을 입력하세요(국어, 영어, 수학)" << endl;
            cin >> p_score[j];
            p_score[3+= p_score[j];
        }
        p_avg[0= p_score[3/ 3.f;
        p_name += 10;
        p_score += 4;
        p_avg += 1;
    }
}
cs

입력함수 부분입니다.

1에 들어오며 인원수를 입력받은 만큼 반복하도록 for문을 사용하였습니다.

그 후 이름의 입력을 받고 p_name에 입력을 합니다.

 

p_score[3]은 성적의 총합을 넣을 곳인데 0으로 초기화를 시켜줍니다. 그렇지않으면 쓰레기값이 들어가 오류가 발생합니다.

 

 첫번째 반복문 안에 하나의 반복문을 더 만들어 성적을 3개(국,영,수)를

입력할 수 있도록 합니다.

그리고 p_score[3]에 각각의 성적을 더하여 넣었습니다.

 

반복문이 끝나고 밖으로 나와 p_avg[0]에 총합을 3으로 나누어 평균값을 구합니다.

그리고 포인터의 위치를 p_name 10, p_score 4, p_avg, 1만큼씩 옮겨줍니다. 

 

(출력함수)

1
2
3
4
5
6
7
8
9
10
11
12
void output(char *p_name, int *p_score, float *p_avg, int num) { //정보 출력
    for (int i = 0; i < num; i++) {
        cout << "이름 : " << p_name << endl;
        for (int j = 0; j < 4; j++) {
            cout << "\t" << p_score[j];
        }
        cout << "\t" << *p_avg << endl;
        p_score += 4;
        p_name += 10;
        p_avg += 1;
    }
}
cs

출력함수 부분입니다.

반복문을 이용하여 입력함수에서 넣은 정보들을 모두 출력합니다.

 

(메인함수의 case 3 종료부분)

1
2
3
4
5
case 3delete []name; 
                delete []score; 
                delete []avg; 
                cout << "종료합니다" << endl
                exit(-1);
cs

메인함수 case 3 종료부분입니다.

동적메모리는 할당 한 후 종료하기 전 메모리를 해제해주어야합니다.

동적메모리를 할당하게 된다면 사용자가 해제하기 전까지 계속적으로 할당되므로 delete를 사용하여 해제해주어야 합니다.

delete는 하나의 메모리를 해제할 때 사용합니다.

delete [ ] 는 배열을 해제할 때 사용합니다.

반응형