Функция со сменным числом параметров для заполнения массивов

Функция при вызове должна заполнять массивы (столько, сколько нужно). Первый параметр – количество массивов, второй – кол-во заполняемых элементов, потом указываем массивы, которые нужно заполнить. Объясните, пожалуйста в чём проблема и как правильно.

#include <iostream>
#include <stdarg.h>
#include <cmath>

using namespace std;

void fullArr(int arrCount, int n,...) 
{
    va_list argPt;
    va_start(argPt, arrCount);

    while (arrCount--) {
        va_arg(argPt, int);
        for (int i = 0; i < n; i++) {
            cin >> argPt[i];
        }
    }
    


}

int main()
{
    int arrCount;
    cout << "Enter array quantity";
    cin >> arrCount;
    int n;
    cin >> n;
    int arr1[100];
    int arr2[100];
    fullArr(arrCount, n, arr1, arr2);
    
    for (int i = 0; i < n; i++) {
        cout << arr1[i]<<' ';
    }
    cout << endl;

    for (int i = 0; i < n; i++) {
        cout << arr2[i] << ' ';
    }
    cout << endl;
    return 0;

Ответы (2 шт):

Автор решения: вася
#include <iostream>
#include <cstdarg>
#include <cmath>

using namespace std;

void fullArr(int n, int arrCount, ...)
{
    va_list args;
    va_start(args, arrCount);

    while (arrCount--) {
        int* arr = va_arg(args, int*);
        for (int i = 0; i < n; i++) {
            cin >> arr[i];
        }
    }

    va_end(args);
}

int main()
{
    int arrCount;
    cout << "Enter array quantity";
    cin >> arrCount;
    int n;
    cin >> n;
    int arr1[100];
    int arr2[100];
    fullArr(n, arrCount, arr1, arr2);

    for (int i = 0; i < n; i++) {
        cout << arr1[i]<<' ';
    }
    cout << endl;

    for (int i = 0; i < n; i++) {
        cout << arr2[i] << ' ';
    }
    cout << endl;
    return 0;
}
→ Ссылка
Автор решения: Harry
void fullArr(int arrCount, int n, ...)
{
    va_list argPt;
    va_start(argPt, n);

    while(arrCount--) {
        int * arr = va_arg(argPt, int*);
        for (int i = 0; i < n; i++)
            cin >> arr[i];
    }
    va_end(argPt);
}

Вообще-то так... Но у вас тогда проблема - как вы собираетесь передавать иное количество массивов, кроме двух? Если пользователь попросит их три? Может, вам надо это?

void fillArr(int** arr, int arrCount, int n)
{
    for(int i = 0; i < arrCount; ++i)
    {
        cout << "Enter array " << (i+1) << ": ";
        for (int j = 0; j < n; j++)
            cin >> arr[i][j];
    }
}

int main()
{
    int arrCount;
    cout << "Enter array quantity: ";
    cin >> arrCount;
    int n;
    cout << "Enter array size: ";
    cin >> n;

    int **arr = new int*[arrCount];
    for(int i = 0; i < arrCount; ++i)
        arr[i] = new int[n];

    fillArr(arr, arrCount, n);

    for (int i = 0; i < arrCount; i++)
    {

        for (int j = 0; j < n; j++) {
            cout << arr[i][j]<< ' ';
        }
        cout << endl << "-------\n";
    }

    for(int i = 0; i < arrCount; ++i)
        delete[] arr[i];
    delete[] arr;

}
→ Ссылка