Я немного изменил ваш код, чтобы достичь вашей цели.Чтобы получить размер массива из пользовательского ввода в C99, вам нужно динамически назначить его, например, по calloc (elements_number, element_size_in_bytes) при запуске вашей программы.Не забудьте освободить назначенную память, чтобы избежать утечек памяти.Как показано ниже:
int* array = calloc(user_input, sizeof(int));
...
//some code
...
free(array);
Ваша отдельная функция выглядит немного сложной.Эта часть неверна:
for(a = &n; a < n + size; a++)
То, что вы здесь делаете, заставляет a указывать на целое число n . a больше не указывает на исходный массив.Таким образом, выполнение вызова типа a [n] , когда a равно & n , похоже на (& n) [n] . n также не меняет значение, поскольку вы увеличиваете указатель на n , а не на значение, на которое он указывает.
Далее, если вы хотите отобразить элементы массива, сделайте это с помощьюиспользуя цикл, как я сделал ниже.
Я не смог найти назначение параметра n в вашей отдельной функции.Я использовал его как количество реальных элементов в большем массиве, поэтому мне не нужно печатать все элементы.
Надеюсь, этот ответ оправдает ваши ожидания.
#include <stdio.h>
#include <stdlib.h>
void separate(int *a, int *larger_count, int value, int *larger, int size, int *smaller);
int main()
{
//Find size of array
int length;
int *length_pointer = &length;
printf("Enter the length of the array: ");
scanf("%d", length_pointer);
//Enter array elements
int*array = calloc(*length_pointer, sizeof(int));
int*p;
printf("Enter %d numbers: ", length);
for(p = array; p < array + length; p++)
scanf("%d", p);
//Find separating value
int value;
printf("Enter the number to split the array: ");
scanf("%d", &value);
//Declare arrays and call function
int *larger = calloc(*length_pointer, sizeof(int));
int *smaller = calloc(*length_pointer, sizeof(int));
int larger_count = 0;
separate(array, &larger_count, value, larger, length, smaller);
for (int i = 0 ; i < larger_count ; ++i)
{
printf("%d ", larger[i]);
}
printf("\n");
for (int i = 0 ; i < length - larger_count; ++i)
{
printf("%d ", smaller[i]);
}
printf("\n");
free(array);
free(larger);
free(smaller);
return 0;
}
/*************************************************************************************
separate finds numbers larger than value in array a and stores them in array larger.
Numbers smaller than or equal to value will be stored in the smaller array.
size points to a variable in which the function will store the number of larger
numbers in the array.
*************************************************************************************/
void separate(int *a, int *larger_count, int value, int *larger, int size, int *smaller)
{
for(int x = 0, y = 0, z = 0; x < size; x++)
{
if (a[x] > value)
{
larger[y] = a[x];
y++;
*larger_count = y;
} else
{
smaller[z] = a[x];
z++;
}
}
}