使用用户插入的元素填充数组

时间:2016-09-11 11:16:33

标签: c++ arrays

大家早上好。我试图用一个用户输入的元素填充一个数组;问题是,虽然我已经在互联网上找到了答案,但它说我的代码应该可行,但它并没有。具体来说,计算机说我试图运行程序后程序停止工作,说实话,我真的不明白我犯了什么错误。代码如下:

#include <iostream>
using namespace std;

void getarray (int[],int);
void print (int[],int);

int main(){
    const int size=10;
    int n[]={0};
    getarray (n,size);
    print (n,size);
}

void getarray (int n[],const int size){
    cout<<"Insert elements to fill the array:\n";
    for (int i=0;i<size;i++){
        cin>>n[i];
    }
    cout<<"Filling completed.\n";
}
void print (int n[],const int size){
    cout<<"The inserted array is:\n";
    for (int k=0; k<size; k++)
        cout<<n[k]<<" ";
}

仅用于获取数组并打印它。

2 个答案:

答案 0 :(得分:5)

问题在于你的数组声明。

int n[]={0};

这告诉编译器你想要一个大小为1的数组,其中n [0]的元素初始化为0。 一旦我大于0,你的代码就会越走越远。

int n[size];

可能就是你在这里寻找的东西。 如果不清楚,请阅读http://www.cplusplus.com/doc/tutorial/arrays/

答案 1 :(得分:0)

问题是您已将 main()中的数组 n 声明为:

int n[] = {0};

该语句的作用是声明一个数组n并初始化它。如您所见,您只使用一个元素初始化数组,即“ 0 ”。这种声明方式根据数组初始化程序语句中使用了多少元素,将创建适当大小的数组的责任委托给编译器。例如:

int foo[] = {1, 2, 3, 4};

会创建一个数组foo,其内存足以容纳最多4个整数。

因此,您的代码所做的就是有效地创建一个只包含1个整数的数组。

现在,当您访问函数中的数组n 时,您尝试使用索引&gt;访问数组。 0.换句话说,数组是一个单元素数组,n [1],n [2]等超出范围,并导致访问随机位置导致未定义的行为(以及程序崩溃!)

您可能正在寻找的是

int n[size];

将创建一个具有足够内存的数组来容纳10个整数元素。