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

How to feed array elements from user (i.e., the console) and how to pass array elements to a function as arguments

本文关键字:数组元素 函数 参数传递 用户 控制台      更新时间:2023-10-16

这是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();
}

您确实需要对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改为a维,则应将输入函数的返回类型更改为void,并删除返回的arr[r][c];

其次,你在主循环中定义了arr[5][5],这是不能从其他函数访问的,你甚至没有传递一个指针变量。您应该向输入函数传递一个双指针,以便这样做,或者您可以在主函数之外定义arr[5][5]

最后,你正在分配矩阵的大小,但你不是动态地分配它的大小。

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

正如大家所指出的那样,你需要加强你的编程基础。

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

为什么输入和输出顺序不同…是打错了吗?

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