코딩 잡동사니
[C] 동적 메모리 할당을 이용한 가변 배열 만들기
코딩하는 원숭이
2022. 5. 22. 17:43
학부생일적 받았던 간단한 과제였다. C로 구현하였고 더 까먹기전에 블로그에 정리해둔다.
#조건
① 세자리수를 입력받는다.(이 부분에 대해선 따로 예외처리하지 않았다.)
② 수를 입력받은 뒤, "그게 계산하려는 모든 숫자입니까?"메세지를 출력하여 연산을 끝낼지 결정한다.
③ 연산이 끝나지 않았으면 다시 수를 입력받고, 끝났으면 입력한 번호 리스트와 그의 합계, 평균, 최댓값, 최솟값을 구하여 출력한다.
#Lesson learned
처음엔 malloc만 사용하여 구현했는데, '중단점을 트리거 했습니다.'라는 오류 메세지와 함께 프로그램이 죽어버렸다. 그러나 relloc을 사용하여 이 부분을 간단하게 해결할 수 있었다.
#사용한 라이브러리 함수
- malloc(int size) : size크기의 메모리 블록을 할당하고, 이 메모리 블록의 시작 주소를 반환한다. 메모리 확보가 불가능하면 NULL을 반환한다.
int* pi = (int*)malloc(sizeof(int)); //int를 저장할 공간 할당
- realloc(void block, int size)
(int*)realloc(score, (start) * sizeof(int))
#소스코드
#include <stdio.h>
#include <stdlib.h>
int main()
{
int start = 1;
int* score;
int i = 0;
char answer;
int sum = 0;
int avg = 0;
int min = 999;
int max = 0;
int minEx, maxEx;
score = (int*)malloc(start * sizeof(int));
while (1)
{
printf("세 자리 수를 입력하시오>>");
score[i] = 0;
scanf(" %d", &score[i]);
printf("그게 입력하려는 모든 숫자입니까?( y / n )");
scanf(" %c", &answer);
if (answer == 'y')
{
break;
}
else if (answer == 'n')
{
start++;
score = (int*)realloc(score, (start) * sizeof(int)); //가변 배열 길이 재할당
}
i++;
}
printf("입력 번호: ");
for (int i = 0; i < start; i++)
{
printf(" %d ", score[i]);
}
printf("\n");
for (int j = 0; j < start; j++)
{
if (max < score[j])
{
max = score[j];
}
if (score[j] < min)
{
min = score[j];
}
sum += score[i];
}
printf("\n");
printf("합계: %d\n", sum);
printf("평균: %f\n", (float)sum /start);
printf("MAX: %d\n",max);
printf("MIN: %d\n", min);
free(score);
return 0;
}