Я создал программу для разделения одного основного массива с целыми числами на два динамически распределенных массива с нечетными и четными целыми числами.
Все хорошо, кроме одного элемента в обоих нечетных и четных массивах, которые вы можете увидеть в выходной картинке. Я надеюсь, вы понимаете, о чем я. Также приветствуются любые советы по улучшению кода. Заранее спасибо:)
Код:
#include <stdio.h>
#include <stdlib.h>
void printArr(int * arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n\n");
}
int main() {
int arr[] = { 7689, 6534, 456, 67, 7652, 879, 544, 12, 4345, 867, 44, 23545, 8, 6787, 34, 26, 56, 3, 41, 6 };
int size = sizeof(arr) / sizeof(arr[0]);
int *arrPtr = arr;
int *oddArr = malloc(sizeof(int));
if (oddArr == NULL) {
return 1;
}
int oddArrSize = 0;
int *evenArr = malloc(sizeof(int));
if (evenArr == NULL) {
return 1;
}
int evenArrSize = 0;
for (int i = 0; i < size; i++) {
if (arr[i] % 2 == 0) {
oddArr = realloc(oddArr, sizeof(oddArr) + sizeof(int));
if (oddArr == NULL) {
return 1;
}
oddArr[oddArrSize] = arr[i];
oddArrSize++;
}
else {
evenArr = realloc(evenArr, sizeof(evenArr) + sizeof(int));
if (evenArr == NULL) {
return 1;
}
evenArr[evenArrSize] = arr[i];
evenArrSize++;
}
}
printf("Main arr: \n");
printArr(arrPtr, size);
printf("Odd arr: \n");
printArr(oddArr, oddArrSize);
printf("Even arr: \n");
printArr(evenArr, evenArrSize);
free(oddArr);
free(evenArr);
}
Выход: Выход