문제)
숫자를 입력 받을 수 있는 메모리개수를 할당하고 입력 받은 수의 합계를 구하시오
0 이면 종료이고 음의 숫자가 들어 오면 다시입력을 하는 프로그램을 작성하시오.
몇 개의 숫자를 입력하겠습니까?(0:종료) : 7
1 번째 값은? : 1
2 번째 값은? : 2
3 번째 값은? : 3
4 번째 값은? : 4
5 번째 값은? : 5
6 번째 값은? : 6
7 번째 값은? : 7
추가로 몇 개를 더 입력하시겠습니까?(0:종료) : 3
8 번째 값은? : 8
9 번째 값은? : 9
10 번째 값은? : 10
합계는 55 입니다.
몇 개의 숫자를 입력하겠습니까?(0:종료) : -4
0 보다 커야 합니다.
몇 개의 숫자를 입력하겠습니까?(0:종료) : 0
종료합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <malloc.h>
void input();
void scan();
void sumall();
void arrplus();
int* arr = { 0 };
int num = 0;
void scan() {
printf("몇개의 숫자를 입력하시겠습니까?(0종료) : ");
scanf("%d", &num);
if (num == 0) {
printf("종료합니다");
if (arr != NULL)
free(arr);
exit();
}
}
void input() {
if (num > 0)
arr = (int*)malloc(sizeof(int) * num);
else if (num < 0) {
printf("0보다 커야합니다\n");
scan();
input();
}
for (int i = 0; i < num; i++) {
printf("%d번째 값은? : ", i + 1);
scanf("%d", &arr[i]);
getchar();
}
}
void sumall() {
int sumarr = 0;
for (int i = 0; i < num; i++) {
sumarr += arr[i];
}
printf("합계는 %d 입니다\n", sumarr);
}
void arrplus() {
int numsave = 0;
int num2 = 0;
numsave = num;
printf("추가로 몇개의 숫자를 입력하시겠습니까?(0종료) : ");
scanf("%d", &num2);
if (num2 == 0) {
printf("종료합니다");
if (arr != NULL)
free(arr);
exit();
}
num = num + num2;
arr = (int*)realloc(arr, sizeof(int) * num);
for (numsave; numsave < num; numsave++) {
printf("%d번째 값은? : ", numsave + 1);
getchar();
scanf("%d", &arr[numsave]);
}
}
int main(void)
{
while (1) {
scan();
input();
sumall();
printf("\n");
arrplus();
sumall();
printf("\n");
}
}
'C, C++ > 4.배열과 포인터' 카테고리의 다른 글
포인터 배열 교재 연습문제 (0) | 2022.02.18 |
---|---|
0214 배열 문제 (0) | 2022.02.14 |
4. 배열과 포인터 개념 (0) | 2022.02.14 |