-1를 입력할 때까지 정수 입력받은 후 출력
초기 배열길이: 5 / 꽉 찰때마다 3씩 추가
배열의 길이 모르기때문에 malloc 혹은 calloc 함수를 이용해야함.
마지막에 출력할 때, 값을 넣지 않은 인덱스값에 쓰레기값이 들어있는게 싫어서 나는 calloc함수를 이용했다.
(calloc -> 모든 비트 0으로 초기화 / malloc -> 쓰레기 값으로 초기화)
<내 풀이>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=0, num;
typedef unsigned int usint;
usint size = 5;
int * ptr = (int *)calloc(size, sizeof(int));
printf("정수입력: ");
scanf("%d", &num);
while(num!=-1)
{
if(i>=size)
{
size+=3;
printf("size: %d \n",size);
ptr = realloc(ptr, sizeof(int)*size);
}
ptr[i] = num;
i++;
printf("정수입력: ");
scanf("%d", &num);
}
printf("배열 출력: ");
for(i=0; i<=size; i++)
printf("%d ", ptr[i]);
free(ptr);
return 0;
}
나는 예를들어 ptr[8]이고 6개의 값만 채워져있으면 마지막은 0으로 출력되도록 작성했다..
<답지 풀이>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int arrlen = 5;
int idx = 0;
int i;
int *arr = (int *)malloc(sizeof(int)*arrlen);
while(1)
{
printf("정수입력: ");
scanf("%d", &arr[idx]);
if(arr[idx]==-1)
break;
if(arrlen==idx+1)
{
arrlen+=3;
arr=(int *)realloc(arr, sizeof(int)*arrlen);
}
idx++;
}
for(i=0; i<idx; i++)
printf("%d ", arr[i]);
free(arr);
return 0;
}
'STUDY > CODING' 카테고리의 다른 글
열혈 C : 도전 프로그래밍4_1번, 2번 문제 (0) | 2020.03.21 |
---|---|
맥북 도커 설치 및 우분투 실행 (2) | 2020.03.18 |
열혈 C: 문제25-2 1번 문제 (1) | 2020.03.14 |
열혈 C: 문제21-2 3번 문제 (0) | 2020.03.14 |
열혈 C : PopuResarch.c 1차원으로 표현하기 (0) | 2020.03.14 |
댓글