我想创建一个函数,它将一个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;
}
答案 0 :(得分:2)
这里有一堆错误。
您定义的尺寸与int size1;
一样简单。它具有未定义的值,即随机值。
使用int array1[size1]
,您只需创建一个随机大小的数组。
您将size1传递给函数getdata
并忽略变量的值,并通过用户的输入覆盖它。
接下来,迭代一个未知大小的数组,假设用户猜到了这个大小......
那么,如何解决这个问题。首先,如果在编译时未知数组的大小(当时,您正在编写程序),则需要动态数组。您应该使用标准库中的矢量类。所以,试试吧:
#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
包含的内容。