如何从用户(即控制台)提供数组元素以及如何将数组元素作为参数传递给函数

时间:2012-01-03 04:23:48

标签: c++ visual-c++ multidimensional-array

以下是我一直试图操作超过一天的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 个答案:

答案 0 :(得分:2)

您真的需要更深入地了解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;
}

答案 1 :(得分:0)

首先,从输入函数中返回一个循环中的值,使循环停止并返回主函数。

因此,如果您想要cin输入矩阵的维度,则应将输入函数的返回类型更改为void,并删除返回arr[r][c];

其次,你在主循环中定义了arr[5][5],它不能从另一个函数访问,你甚至没有传递一个指针变量。您应该将双指针传递给输入函数以执行此操作,或者您可以在主函数外部定义arr[5][5]

最后,您要指定矩阵的大小,但不是动态指定其大小。

我建议对C / C ++中的函数和变量有一点了解。

答案 2 :(得分:0)

正如每个人都指出的那样,你需要加强你的编程基础。

  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. 数组总是通过引用传递,因此函数内部的更改将反映在调用函数中,因此您不需要返回数组。

答案 3 :(得分:0)

为什么输入和输出顺序不同......这是错字吗?

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