将数组作为输入的函数

时间:2014-05-08 05:46:13

标签: c++ arrays function

我想创建一个函数,它将一个size(size1)的数组(array1)作为输入,然后在main中调用它。直到现在我达到了这个程度,但程序出了问题。谁能帮助我?

#include <iostream>
using namespace std;

void getdata( int array1[],int size1 ) {
    cin>>size1;
    for ( int i=0; i<size1; i++) {
        cin>>array1[i];
    }
}

int main () {
    int size1;
    int array1[size1];
    getdata(array1,size1);
    return 0;
}

3 个答案:

答案 0 :(得分:2)

这里有一堆错误。

  1. 您定义的尺寸与int size1;一样简单。它具有未定义的值,即随机值。

  2. 使用int array1[size1],您只需创建一个随机大小的数组。

  3. 您将size1传递给函数getdata并忽略变量的值,并通过用户的输入覆盖它。

  4. 接下来,迭代一个未知大小的数组,假设用户猜到了这个大小......

  5. 那么,如何解决这个问题。首先,如果在编译时未知数组的大小(当时,您正在编写程序),则需要动态数组。您应该使用标准库中的矢量类。所以,试试吧:

    #include <iostream>
    #include <vector>
    
    std::vector<int> getdata() {
        int size;
        std::cout << "Vector size: ";
        std::cin >> size;
    
        std::cout << "Please, enter exactly " << size  << " integers\n";
        std::vector<int> data(size);
    
        for (int i = 0; i < size && std::cin; ++i) 
            std::cin >> data[i];
        return data;
    }
    
    int main () {
        std::vector<int> data = getdata();
    
        std::cout << "You've inputed:";
        for (int i = 0; i < data.size(); ++i)
            std::cout << " " << data[i];
    
        std::cout << "\nThanks, and bye!\n";
    
        return 0;
    }   
    

    更新

    好的,让我们试试没有载体。但是请保证,你不会在生产代码中使用它,并且会很快忘记它,因为你已经学会了矢量))。

    我想提请你注意我如何将大小传递给getdata函数。我正在使用参考。这意味着可以修改size变量的值,并且调用者可以看到修改。因此,getdata有两个输出参数(和零输入)。也许更清晰的解决方案是返回一个包含指针和大小的结构。

    #include <iostream>
    
    int *getdata(int &size) {
        std::cout << "Array size: ";
        std::cin >> size;
    
        std::cout << "Please, enter exactly " << size  << " integers\n";
        int *data = new int[size];
    
        for (int i = 0; i < size && std::cin; ++i) 
            std::cin >> data[i];
        return data;
    }
    
    int main () {
        int size = 0;
        int *data = getdata(size);
    
        std::cout << "You've inputed:";
        for (int i = 0; i < size; ++i)
            std::cout << " " << data[i];
    
        std::cout << "\nThanks, and bye!\n";
    
        // now we're responsible to free the memory
        delete[] data;
        return 0;
    }   
    

答案 1 :(得分:1)

这应该有效。请注意代码中的注释。

#include <iostream>
using namespace std;

int* getdata(int& size) {

    // Read the size of the array.
    cin>>size;

    // Allocate memory for the array.
    int* array = new int[size];

    // Read the data of the array.
    for ( int i=0; i<size; i++) {
        cin>>array[i];
    }

    // Return the data.
    return array;
}

int main () {

    int size;

    // Get the data.
    int* array = getdata(size);

    // Use the data.
    //

    // delete the data
    delete [] array;

    return 0;
}

答案 2 :(得分:0)

C ++不允许变长数组,数组大小必须是常量表达式 这句话是错误的:

int size1;
int array1[size1];

如果需要,请使用vectors或在heap上分配数组。

并在:

void getdata( int array1[],int size1 ) {
cin>>size1;

您正在覆盖size1包含的内容。