Си, переменные, функции
помогите с вопросом. Как и где задать переменную n, чтобы ее в дальнейшем можно было использовать в нескольких функциях? Простой пример кода:
#include <stdio.h>
#include "locale.h"
void writeArray(int A[])
{
int i;
printf("Введите размер массива:\n");
scanf_s("%d", &n);
printf("Наберите массив:\n");
for (i = 0; i < n; i++)
scanf_s("%d", &A[i]);
}
int main()
{
setlocale(LC_CTYPE, "Russian");
int A[100];
int i;
writeArray(A, n);
for (i = 0; i < n; i++)
printf("%d ", A[i]);
}
Есть вот такой-вот код. Есть переменная n, которая вводится пользователем в функции writeArray. Как передать значение переменной в функцию main? И где ее вообще задавать? Делать n глобальной переменной не нужно. Я нашел этот вариант решения проблемы, но мне сказали, сделать по другому, сделав n параметром функции.
P.S. Я так-то сортировки пишу. Дальше есть еще несколько функций, где также нужно использовать n.
Ответы (1 шт):
Так как размер массива и он сам логически очень связаны. Совместите массив и его размер в структуру. Вам предлагали два аргумента, один указатель на массив, второй число. А если передавать структуру, то только один указатель на неё.
#include <stdio.h>
#include "locale.h"
typedef
struct s_array {
int a [ 100 ] ;
int n ;
} array ;
void writeArray( array * const A )
{
int i;
printf("Введите размер массива:\n");
scanf("%d", & A -> n ) ;
printf("Наберите массив:\n");
for (i = 0; i < A -> n ; i++)
scanf("%d", & A -> a [i]);
}
int main()
{
setlocale(LC_CTYPE, "Russian");
array A ;
int i;
writeArray ( & A ) ;
for (i = 0; i < A.n; i++)
printf("%d ", A.a[i]);
}