如何返回输入到数组中的值的数量?

时间:2019-01-28 22:43:00

标签: c++ arrays static

此刻,我很困惑,无法解决这个问题。任何帮助或指导将不胜感激。第一部分正在工作,但是当我尝试返回第二部分中的用户输入数时,出现了细分错误。以下是这两个部分的说明:

P2.1编写一个由main和displayArray函数组成的程序。 main函数声明一个包含10个元素的整数数组,并同时使用最多10个任意值初始化它们。然后,main函数调用displayArray函数以显示数组的内容。

P2.2使用附加的fillArray函数扩展P2.1,该函数提示用户输入最多10个(数组大小)整数。由于静态分配的数组通常会部分填充小于数组实际大小或存储容量的值(在本例中为10),因此fillArray函数必须返回一个正整数值,该值代表用户输入的输入值的实际数量

#include <iostream>
using namespace std;

int displayArray(int arr[]);
int fillArray(int newArray[], int &inputs);

const int size = 10;

int main() {

    int x, inputs = 0;
    int arr[size] = {0,1,2,3,4,5};
    int newArray[] = {};

    displayArray(arr);

    cout << "Enter .5 when finished. ";
    fillArray(newArray, inputs);

    cout << inputs;

    cin >> x;
    return 0;
}

int displayArray(int arr[]) {

    for (int i = 0; i < size; i++)
        cout << arr[i] << " " << endl;

}

int fillArray(int newArray[], int &inputs) {

    for(int i = 0; ; i++) {
        cout << "Enter an integer: " << endl;
        cin >> newArray[i];

        if(newArray[i] == .5) {
            inputs = i + 1;
            return inputs;
            break;
        }           
    } 

}

1 个答案:

答案 0 :(得分:1)

您不会为newArray保留内存,因为int newArray[] = {}会分配一个大小为0的数组(据我所知实际上还没有定义)。因此,在调用fillArray时,您将超出数组范围。

int newArray[10] = { 0 }

,如果您输入的值不超过10,则至少应该可以正常工作。

fillArray中,为了不超出范围,我会写...

int fillArray(int newArray[], int &inputs) {

    for(inputs = 0; inputs < 10 ; inputs++) {
       cout << "Enter an integer: " << endl;
       cin >> newArray[i];

       if(newArray[i] == 0) {
         break;
       }
    }
    inputs++;
    return inputs;
}

请进一步注意,newArray[i] == .5至少具有误导性,因为newArray的类型为int,而.5是浮点值。它将永远不会求值为true,因为在比较之前,积分值newArray[i]将被转换为float,并且这种转换将永远不会导致0.5