【问题标题】:How to feed array elements from user (i.e., the console) and how to pass array elements to a function as arguments如何从用户(即控制台)提供数组元素以及如何将数组元素作为参数传递给函数
【发布时间】:2012-02-01 05:37:42
【问题描述】:

这是我尝试操作一天多的 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();
}

【问题讨论】:

  • 我认为你有一些学习要做。您将数组作为整数传递,然后尝试像修改数组一样修改整数。 int input(int i, int j, int arr)

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


【解决方案1】:

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

【讨论】:

  • 感谢您付出所有的努力。现在,我想做的另一件事是从用户那里插入行和列的值。有可能吗?
  • 看第一个使用指针的例子,它的工作原理是一样的:cin >> array[i][a];
【解决方案2】:

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

所以,如果你想cin输入矩阵的一个维度,你应该把输入函数的返回类型改为void,并去掉返回arr[r][c];

其次,您在主循环中定义了arr[5][5],其他函数无法访问它,您甚至没有传递指针变量。为此,您应该将双指针传递给输入函数,或者您可以在主函数之外定义arr[5][5]

最后,您正在分配矩阵的大小,但您并未动态分配其大小。

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

【讨论】:

    【解决方案3】:

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

    1. 首先 main 的返回类型应该是 int。记住这一点。
    2. 输入的签名应该是这样的void input(int i, int j, int arr[][5])
    3. output 也是如此
    4. 此外,在迭代读取/写入数组时,偏移量从 0 而不是 1 开始,到 SIZE - 1 结束。所以改变 for(r=1;r&lt;=i;r++)for(r=0;r&lt;i;r++)
    5. 数组总是通过引用传递,所以函数内部的变化会反映在调用函数内部,所以你不需要返回数组。

    【讨论】:

      【解决方案4】:

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

      空输出(整数数组[5][5])

      cout << "Array[" << i << "][" << a << "] = " << array[a][i] << endl; // typo may be
      cout << "Array[" << i << "][" << a << "] = " << array[i][a] << endl; // correction
      

      【讨论】:

      • 这应该是一条评论。
      猜你喜欢
      • 2012-05-24
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 2017-07-11
      • 1970-01-01
      相关资源
      最近更新 更多