Как передать элементы массива от пользователя (то есть с консоли) и как передать элементы массива в функцию в качестве аргументов - PullRequest
1 голос
/ 03 января 2012

Вот оригинальный код Visual C ++, которым я пытался манипулировать уже более суток.Это самая простая безошибочная программа, которая работает правильно.Что я хочу сделать, это вставить две функции: одну для получения ввода от пользователя, а другую для отображения вывода.

#include<iostream>
#include<iomanip>
using namespace std;

void main()
{
    int i, j,r,c;
    int arr[5][5];
    cout<< "enter r and c";
    cin>> i>> j;

    for(r=1;r<=i;r++)
    {
        for(c=1;c<=j;c++)
        {
            cout<< "enter elements";
            cin>> arr[r][c];
        }
    }

    cout<< " elements are"<< endl;
    for(r=1;r<=i;r++)
    {
        for(c=1;c<=j;c++)
        {

            cout<<setw(4) <<arr[r][c];
        }
        cout<< endl<< endl;
    }

    cin.ignore();
    getchar();
}

Это то, что я пытался сделать, но он дает ошибки.

#include<iostream>
#include<iomanip>
using namespace std;
int input(int i, int j, int arr)
{   
    int r,c;
    for(r=1;r<=i;r++)
    {
        for(c=1;c<=j;c++)
        {
            cout<< "enter elements";
            cin>> arr[r][c];

        }
    }
    return arr[r][c];
}
void output(int i, int j, int arr)
{   
    int r,c;
    for(r=1;r<=i;r++)
    {
        for(c=1;c<=j;c++)
        {

            cout<<setw(4) <<arr[r][c];
        }
        cout<< endl<< endl;
    }
}

void main()
{
    int i, j,r,c;
    int arr[5][5];
    cout<< "enter r and c";
    cin>> i>> j;

    input(i,j,arr);

    cout<< " elements are"<< endl;

    output(i,j,arr);
    cin.ignore();
    getchar();
}

Ответы [ 4 ]

2 голосов
/ 03 января 2012

Вам действительно нужно более глубокое понимание C ++, указателей и функций.Следующее - это то, что вы ищете (в некотором роде), однако вам, безусловно, нужно гораздо более глубокое понимание C ++:

#include<iostream>

using namespace std;

void output(int ** array)
{
    for (int i= 0;i<5;++i)
    {
        for (int a= 0;a<5;++a)
        {
            cout << "Array[" << i << "][" << a << "] = " << array[a][i] << endl;
        }
    }
}

void input(int ** array)
{
    for (int i= 0;i<5;++i)
    {
        for (int a= 0;a<5;++a)
        {
            cout << "Array[" << i << "][" << a << "] = " << endl;
            cin >> array[i][a];
        }
    }
}

int main()
{
    int** array;
    array = new int*[5];
    for (int i=0;i<5;++i)
        array[i] = new int[5];
    input(array);
    output (array);
    delete []array;
    cin.ignore();
    getchar();
    return 0;
}

Проблема в том, что объяснить это будет все равно, что учить вас C ++ с нуля.Какой бы метод вы ни использовали для изучения C ++, придерживайтесь его.Вы попадете туда, вы просто не совсем готовы.Одна вещь, которую вы найдете, это не всегда легко перенести вещи на следующий уровень.Есть причина, по которой вещи идут и останавливаются там, где они делают, когда учатся.Хотя сделать этот дополнительный шаг или попытаться сделать это неплохо, вам просто нужно знать, когда еще не время.

Редактировать:

Ради завершения,Вот пример без указателей:

#include<iostream>

using namespace std;

void output(int array[5][5])
{
    for (int i= 0;i<5;++i)
    {
        for (int a= 0;a<5;++a)
        {
            cout << "Array[" << i << "][" << a << "] = " << array[a][i] << endl;
        }
    }
}

void input(int array[5][5])
{
    for (int i= 0;i<5;++i)
    {
        for (int a= 0;a<5;++a)
        {
            array[i][a] = i*a;
        }
    }
}

int main()
{
    int array[5][5];
    input(array);
    output (array);
    cin.ignore();
    getchar();
    return 0;
}
0 голосов
/ 05 апреля 2014

Почему порядок ввода и вывода различен ... это опечатка?

void output (int array [5] [5])

cout << "Array[" << i << "][" << a << "] = " << array[a][i] << endl; // typo may be
cout << "Array[" << i << "][" << a << "] = " << array[i][a] << endl; // correction
0 голосов
/ 03 января 2012

Как указало каждое тело, вам нужно укрепить основы программирования.

  1. Сначала тип возврата main должен быть int . Запомни это.
  2. подпись ввода должна быть примерно такой void input(int i, int j, int arr[][5])
  3. То же самое относится к output
  4. Также при итерации для чтения / записи в массиве смещение начинается с 0, а не с 1, и заканчивается на SIZE - 1. Так что меняй for(r=1;r<=i;r++) до for(r=0;r<i;r++)
  5. Массивы всегда передаются по ссылке, поэтому изменения внутри функции будут отражены внутри вызывающей функции, поэтому вам не нужно возвращать массив.
0 голосов
/ 03 января 2012

Прежде всего, из вашей входной функции вы возвращаете значение в цикле, которое останавливает цикл и возвращает к основной функции.

Итак, если вы хотите cin измерениематрицу ввода, вы должны изменить тип возврата функции ввода на void и удалить возврат arr[r][c];.

Во-вторых, вы определили arr[5][5] в основном цикле, который недоступен из другихфункция, и вы даже не передаете указатель переменной.Вы должны передать двойной указатель на функцию ввода, чтобы сделать это, или вы можете просто определить arr[5][5] вне основной функции.

Наконец, вы назначаете размер матрицы, но выне динамически присваивать его размер.

Я полагаю, что немного больше понимания функций и переменных в C / C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...