@samsungovetch

C — Как объединить две последовательности (массива) в один без повторения чисел?

// задача 338б

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>

#define SIZE 25

int n, a[SIZE], *b, *c;

int getArraySize(int *arrayName) {
	if (arrayName != NULL)
		return sizeof(arrayName) / sizeof(arrayName[0]);
	else {
		printf("ERROR");
		return 0;
	}
}

void main() {
	n = 0 + rand() % ((100 + 1) - 0);
	b = (int*)malloc(sizeof(int)*n);
	c = b;


	for (int i = 0; i< SIZE; i++) {
		a[i] = 0 + rand() % ((100 + 1) - 0);
	}
	for (int i = 0; i< n; i++) {
		b[i] = 0 + rand() % ((200 + 1) - 0);
	}


	for (int i = 0; i< SIZE; i++) {
		printf("> %d. %d\n", i, a[i]);
	}
	printf("\n");
	for (int i = 0; i< n; i++) {
		printf(">> %d. %d\n", i, b[i]);
	}


	for (int i = 0; i<SIZE; i++) {
		for (int j = 0; j<n; j++) {
			if (a[i] != b[j]) {
				c = (int*)realloc(c, sizeof(int)*(n + 1));
				c[getArraySize(c)] = a[i];
			}
		}
	}
	printf("pause");

	for (int i = 0; i<getArraySize(c); i++) {
		printf(">>> %d. %d ", i, c[40]);
	}
	system("pause");
}


Данный код выводит две последовательности, с третьей не взаимодействуя. Помогите исправить ошибки, пожалуйста
  • Вопрос задан
  • 635 просмотров
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
С помощью конструкции:
return sizeof(arrayName) / sizeof(arrayName[0]);
вы не получите размер массива для динамических массивов, это работает только для статических, когда компилятору заранее известен размер массива. Операция sizeof() - исполняется во время компиляции.
Вы должны вручную считать размер массива c и увеличивать его при realloc.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы