Си, переменные, функции

помогите с вопросом. Как и где задать переменную 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 шт):

Автор решения: AlexGlebe

Так как размер массива и он сам логически очень связаны. Совместите массив и его размер в структуру. Вам предлагали два аргумента, один указатель на массив, второй число. А если передавать структуру, то только один указатель на неё.

#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]);
}
→ Ссылка