문제)

숫자를 입력 받을 수 있는 메모리개수를 할당하고 입력 받은 수의 합계를 구하시오

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

+ Recent posts