如何将数组大小传递给不同的函数?

时间:2017-11-13 01:12:25

标签: c++ arrays function parameters

我有一个问题,似乎我找不到一个能够解决这个问题的正确答案......所以我有这个静态数组arr [some_number]我希望有一个菜单可以处理该数组。当然,其中一个选项是填充数组。一切都应该是单独的功能。这是第一个:`

void fill_array(int arr[], const int size) {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
    cin >> arr[i];
 }
}

`

应该有一个选项让用户输入他想要的数组元素,obv。 n < some_number在这种情况下......但是我的问题出现了:我如何将这个特殊情况下的变量n传递给另一个函数,这样它就能说明用户输入的元素数量而不是数组的const大小。提前谢谢。

1 个答案:

答案 0 :(得分:0)

最好的选择是分担责任。像fill_array()这样的函数根本没有业务提示用户输入数组大小。它已经将大小值作为输入传入,只需按原样使用该值:

void fill_array(int arr[], const int size)
{
    for (int i = 0; i < size; i++)
        cin >> arr[i];
}

事先提示用户,然后根据需要将输入的大小传递给您的函数,例如:

int ask_user_for_size(int max_number)
{
    int n;
    do
    {
        cout << "Enter a number between 1 - " << max_number << ": ";
        cin >> n;
        if ((n > 0) && (n <= max_number)) break;
        cout << "Invalid number, try again" << endl;
    }
    while (true);
    return n;
}

void fill_array(int arr[], const int size)
{
    for (int i = 0; i < size; i++)
        cin >> arr[i];
}

void output_array(const int arr[], const int size)
{
    for (int i = 0; i < size; i++)
        cout << arr[i];
}

... 

int arr[some_number];
int n = ask_user_for_size(some_number);    
cout << "Enter " << n << " numbers: ";
fill_array(arr, n);
output_array(arr, n);

可替换地:

int ask_user_for_size()
{
    int n;
    do
    {
           cout << "Enter a number greater than 0: ";
           cin >> n;
           if (n > 0) break;
           cout << "Invalid number, try again" << endl;
    }
    while (true);
    return n;
}

void fill_array(int *arr, const int size)
{
    for (int i = 0; i < size; i++)
        cin >> arr[i];
}

void output_array(const int *arr, const int size)
{
    for (int i = 0; i < size; i++)
        cout << arr[i];
}

... 

int n = ask_user_for_size();
int *arr = new int[n];
cout << "Enter " << n << " numbers: ";
fill_array(arr, n);
output_array(arr, n);
delete[] arr;