Member 13015247 Ответов: 3

Как получить элементы массива в основной функции?


здесь я знаю, что ошибка заключается в том, что массив[] anf ef, определенный в других функциях, не совпадает с тем, что объявлено в main function, хотя я не объявлял в main function, но
предположим, что он объявлен, но тогда он также не будет работать, так как я мог бы получить элементы of[] и ef[] в main?

Что я уже пробовал:

#include<stdio.h>
int n,j,k,l;
int main()
{
int i,m,q;
printf("enter value of size of array =n\n");
scanf("%d",&n);
int ea[n];
printf("enter elements\n");
for(i=0;i<n;i++)
scanf("%d",&ea[i]);

for(j=0;j<n;j++)
{
    if(ea[j]%2==0)
    eea(&ea[j]);
    else
    oea(&ea[j]);
}
for(m=0;m<=k;m++)
printf("%d ",of[m]);
printf("\n");
for(q=0;q<=l;q++)
printf("%d ",ef[q]);

}
void oea(int *x)
{   static int p=0;
int of[n];
    of[p]=*x;
    p++;
    k=p;
}
void eea(int *x)
{
static int f=0;
int ef[n];
    ef[f]=*x;
    f++;
    l=f;
    
}

3 Ответов

Рейтинг:
1

Richard MacCutchan

scanf("%d",&n);
int ea[n];

Таким образом, вы не можете объявлять массивы из переменных. Вам нужно использовать new оператор, если это C++, или malloc если это код на языке Си.


Рейтинг:
0

Graeme_Grant

Для меня это пахнет домашним заданием...

void oea(int *x)

Измените его с метода на функцию, которая возвращает значение / объект.

Если вы спросите богов Google: как создать функцию c++ [^], они ответят Функции C++ [^] и многое, многое другое...


Рейтинг:
0

Patrice T

Прежде всего, научитесь делать отступы в своем коде, это облегчит его чтение.

#include<stdio.h>
int n,j,k,l;
int *oea(int*);
int *eea(int*);
int main()
{
	int i,m,q,*y,*z,a,b,arry[k],arrz[l];
	printf("enter value of size of array =n\n");
	scanf("%d",&n);
	int ea[n];
	printf("enter elements\n");
	for(i=0;i<n;i++)
	{
		scanf("%d",&ea[i]);
	}
	printf("hi");
	for(j=0;j<n;j++)
	{
		if(ea[j]%2==0)
		{
			y=eea(&ea[j]);
			for(a=0;a<=k;y++)
				arry[a]=*y;
		}
		else
		{
			z=oea(&ea[j]);
			for(b=0;b<=l;y++)
				arrz[b]=*z;
		}

	}
	for(m=0;m<=k;m++)
		printf("%d ",arry[m]);
	printf("\n");
	for(q=0;q<=l;q++)
		printf("%d ",arrz[q]);

}
int *oea(int *x)
{   static int p=0;
	int of[n];
	of[p]=*x;
	p++;
	k=p;
	return &of[p];
}
int *eea(int *x)
{
	static int f=0;
	int ef[n];
	ef[f]=*x;
	f++;
	l=f;
	return &ef[f];
}

Второе: избегайте однобуквенных переменных: умное имя может облегчить понимание вашего кода.
В-третьих: поместите комментарии в свой код,это поможет понять, что вы собираетесь делать.
-----
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.