사용자로부터 원소의 개수를 입력받아서 동적으로 int형 배열을 할당받는 프로그램을 작성해 보세요. 즉, 계속 반복하여, 아래의 작업을 수행해야 합니다. 단, 사용자가 입력한 원소의 개수가 0이나 0보다 작은 값이면 프로그램을 종료합니다. - 기존 ...

열혈강의 C언어 정복 리얼 교과서 연습문제 (p375)

사용자로부터 원소의 개수를 입력받아서 동적으로 int형 배열을 할당받는 프로그램을 작성해 보세요. 즉, 계속 반복하여, 아래의 작업을 수행해야 합니다. 단, 사용자가 입력한 원소의 개수가 0이나 0보다 작은 값이면 프로그램을 종료합니다.

- 기존 원소의 개수보다 작거나 같으면 이를 무시하고 다시 원소의 개수를 입력받습니다.
- 만약 기존 원소의 개수보다 크면 realloc() 함수로 메모리를 확장합니다.
- 또한, 이때 새롭게 추가되는 원소에 대해서는 사용자로부터 그 값을 입력받습니다.
- 사용자로부터 원소의 개수를 입력받기 전에, 현재 원소의 개수와 각 원소의 값을 출력합니다
  (물론 프로그램이 시작되는 최초에는 원소의 개수가 0개입니다.)



  1 #pragma warning(disable:4996)
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 #include <string.h>
  5 void doInput(int count, int *value);
  6
  7 int main()
  8 {
  9     // 두개의 입력값
 10     int i = 0, pvalue = 0;
 11     int count = 0, new_count = 0;
 12     int *value = NULL;
 13     int *value2 = NULL;
 14
 15     // 현재 원소의 개수 출력
 16     // 원소의 개수. 0이하의 값이면 종료
 17
 18     do
 19     {
 20         printf("현재 원소의 개수는 %d개입니다.\n", count);
 21         printf("원소의 개수는(0이하의 값을 입력하면 종료됩니다)?");
 22         scanf("%d", &count); //count : 원소
 23
 24         
 25
 26         if (count > 0// 원소의 값이 0보다 클때
 27         {
 28             
 29             value = (int*)malloc(sizeof(int)*count); // 메모리 할당
 30                         
 31             if (count > new_count) // 최초의 원소의 값이 새로운 원소의 값보다 클때
 32             {
 33                 value2 = (int*)realloc(value, sizeof(int)* count);
                // value 초기값으로 하여 메모리 확장
 34             }
 35             if (NULL != value2) // value2 가 NULL 이 아닌지 체크
 36             {
 37                 value = value2;
 38                 for (i = new_count; i < count; i++) // 새로운 원소 ++
 39                 {
 40                     printf("%d번째 원소의 값은? ", i);
 41                     scanf("%d", &pvalue);
 42                     *(value + i) = pvalue;
 43                 }
 44                 for (i = 0; i < count; i++)
 45                 {
 46                     printf("[%d] %d \n", i, pvalue);
 47                 }
 48             }
 49             else
 50             {
 51                 printf("메모리 할당에 실패하였습니다. \n");
 52             }
 53
 54         }
 55
 56         
 57         new_count = count;
 58
 59     } while (count > 0);
 60     if (NULL != value) free(value); // 메모리 해제
 61
 62     return 0;
 63 }
 64



  ※ '기존 원소의 개수보다 작거나 같으면' 의 조건은 다음에 하기로..

0 개의 댓글: